我尝试将二维数组作为参数传递给如下函数:
void comb(int n, int array[n][n-1])
{
.....
}
在main函数中:
int main(int argc, const char * argv[])
{
const int p = 10;
int array[p][p-1];
comb(p, array); //Error:No matching function for call to 'comb'
return 0;
}
"comb"函数声明在main函数之上。但是Xcode给我的错误信息是"comb(p, array)","没有匹配的函数来调用‘comb’"。
我不知道怎样才能解决这个问题。此外,是否有一些更好的方法来传递一个2-dim数组作为参数?
您的代码在C99中是正确的。
如果你得到一个编译错误,这可能是因为你没有显示真正的代码,或者你没有在C99模式下调用你的编译器。
在C11中,编译器是否支持VLA是可选的,但是你的编译器文档应该指明是否支持VLA。
没有其他方法可以将VLA作为参数传递。
如果你的数组维度在编译时是已知的,那么你可以用#define ARRAY_DIM 10
代替const int p = 10;
;那么您的数组将不再是VLA,函数可以简单地为:
void comb(int array[ARRAY_DIM][ARRAY_DIM-1])
{
不传递矩阵,但当传递数组时,名称只是指向第一个元素的指针。
char myArray [10],
其中myArray实际上是一个char指针而不是char。
你需要改变一些东西。在函数中传递大的东西是要求一个指针
如果梳子取数组
void梳子(int n, int array[n])
这个应该写成
void梳子(int n, int*array)
然后访问元素的样式是
*(阵列+ k)……//等于数组[k]
你不能这样做
阵列[k]…//埃罗。
在main中调用梳子,就像刚才那样,因为数组名已经是指针了
不确定是否为二维,但几乎可以肯定是一样的,因为bidim只是一个以另一种方式排列的大的一维数组。
函数传递指针时,忽略边界
最好的做法是帮助函数避免传递最大长度
的灾难。void comb(int n, int*array,int len)
{
int k=0;
While(*(array+k) !=n) // Search array for a number equal to "n".....
{
k++;
if(k>len)
return 0; // Avoid seeking outside the array, cut now. nice plase to return 0 (not found)
}
return 1; // got a hit before reaching the end.
}
同时在主调用中:
梳子(p, array, sizeof(array)/sizeof(array[0]);//第三个参数是元素个数