将动态分配的2d字符数组传递给函数

Passing a dynamically allocated 2d character array to a function

本文关键字:函数 数组 字符 动态分配 2d      更新时间:2023-10-16

以下是数组的分配方式。

char** cArray =  malloc(10 * sizeof(char *)); 
int i;
for(i =0; i< 10; i++) { 
  cArray[i] = malloc(25 * sizeof(char));
}

如何使用此签名传递到函数:

sampleFunction(int max, char list[][max]){
  //Do something
};

尝试:

sampleFunction(25, cArray);

这给了我以下错误:

expected 'char (*)[(sizetype)(max)]' but argument is of type 'char **'

我也试过:

sampleFunction(int max, char* list[][max]){
  //Do something
};
sampleFunction(25, &cArray);

这给了我以下错误:

expected 'char * (*)[(sizetype)(max)]' but argument is of type 'char ***'

我也试过:

sampleFunction(int max, char* list[][max]){
  //Do something
};
sampleFunction(25, cArray);

这给了我以下错误:

expected 'char * (*)[(sizetype)(max)]' but argument is of type 'char **'

正确的方法是什么?

数组不是指针,指针也不是数组。

第一个参数类型表示list是指向char数组的指针
cArray不是;它是指向CCD_ 4的指针。

第二个说list是指向char*数组的指针,它甚至比cArray更远。

您需要传递正确的类型char**和两个维度:

void sampleFunction(int max_rows, int max_columns, char** list){
    for (int i = 0; i < max_rows; i++)
        for (int j = 0; j < max_columns; j++)
            list[i][j] = 0;
}
sampleFunction(10, 25, cArray);