替代使用三重指针

jog*_*ito 5 c

我有一个指向代码中结构的指针.我想在API中返回这样的指针数组.就像是

Status GetData(MyStructure*** data, int*lengthOfArray)
  {
     *data = malloc(sizeof(MyStructure*)* arbitaryNumber));
     for(i=0....)
     {
       (*data)[i] = pointerToMyStructure;
     }
  }   
Run Code Online (Sandbox Code Playgroud)

有替代方案吗?我的API必须具有返回类型状态.所以我现在看到的唯一前进方向就是成为一名三星级程序员

das*_*ght 8

既然你也返回了数组的长度,并且因为struct指针数组和长度是相关的,你可以构建一个特殊的struct来从你的API中获取两个项目,如下所示:

typedef struct {
    MyStructure **data;
    int length;
} GetDataArg_t;
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样更改API:

Status GetData(GetDataArg_t *args) {
    args->length = arbitaryNumbdr;
    args->data = malloc(sizeof(MyStructure*)* arbitaryNumbdr));
    for(i=0....) {
        args->data[i] = pointerToMytructure;
    }
}
Run Code Online (Sandbox Code Playgroud)

您的API调用如下所示:

GetDataArg_t args;
if (GetData(&args) == STATUS_SUCCESS) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • +1以这种方式将紧密相关的数据固定在一起是一个强有力的举措.如果完全可以改变功能界面,这是值得追求的. (4认同)