我尝试将二维数组作为参数传递给像这样的函数:
void comb(int n, int array[n][n-1])
{
.....
}
在主要功能中:
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数组作为参数传递?
答案 0 :(得分:1)
您的代码在C99中是正确的。
如果遇到编译器错误,可能是因为您没有显示实际代码,或者您没有在C99模式下调用编译器。
在C11中,编译器是否支持VLA是可选的,但编译器文档应指明它是否受支持。
没有其他方法可以将VLA作为参数传递。
如果您的数组维度在编译时已知,那么您可以将const int p = 10;
替换为#define ARRAY_DIM 10
;那么你的数组将不再是VLA,而且函数可以简单地为:
void comb(int array[ARRAY_DIM][ARRAY_DIM-1])
{
答案 1 :(得分:-2)
从未传递过矩阵,但是当传递数组时,名称只是指向第一个元素的指针。
char myArray [10];
其中myArray实际上是一个char指针而不是char。
你需要改变一些东西。在函数中传递大量的东西是要求指针
如果梳子拿一个数组
void comb(int n,int array [n])
这应该像
一样void comb(int n,int * array)
然后以时尚的方式访问元素
*(array + k)... //等于数组[k]
你不能这样做
array [k] ... // Erro。
并且以你的方式在main中调用comb,因为数组名已经是指针
不确定bidimentional但几乎可以肯定,因为bidim只是一个以另一种方式排列的大型一维数组。
当传递指针时,函数会忘记边界。
良好的做法是帮助该功能避免灾难通过max len
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.
}
同时在主要电话中:
comb(p,array,sizeof(array)/ sizeof(array [0]); //第三个param是元素的数量