如果我创建
char a [100] [100];
并发送到函数void func(char ** a); 它表示char()[100]无法转换为char * 。
我想象一个char [100] [100]就像一个指向指针的指针。 我错了吗?
由于
答案 0 :(得分:2)
是的,你确实错了。 a char[100][100]
是一个数组(数组为100 char
),当它传递给函数时,它被转换为指向(数组为100 char
)的指针,{{{ 1}}。将数组作为函数参数传递时,将数组转换为指针只会影响数组的最外层。
您可以将该函数声明为采用该类型的参数,
char (*)[100]
如果您将始终传递包含100列的数组,或者如果要保留函数的类型,则必须传递不同的参数。
答案 1 :(得分:2)
你可以保持简单,并声明如下:
void func(char a[100][100]);
如果您的系统支持可变长度数组,您可以执行以下操作:
void func(int nRows, int nCols, char a[nRows][nCols]);
第二种方法允许您将任何大小的二维数组传递给函数。