将2-dim数组作为函数的参数传递给C时出错

时间:2014-06-30 21:53:05

标签: c arrays multidimensional-array

我尝试将二维数组作为参数传递给像这样的函数:

    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数组作为参数传递?

2 个答案:

答案 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是元素的数量