在 C 语言中将 2 暗数组作为函数的参数传递时出错



我尝试将二维数组作为参数传递给如下函数:

    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]);//第三个参数是元素个数

相关内容

  • 没有找到相关文章

最新更新