11

我正在尝试将二维数组传递给一个接受指针指针的函数。而且我了解到二维数组不是指向指针的指针(指向一维数组的指针)。当我编译下面的代码时,我得到了这个错误。

#include<iostream>

void myFuntion(int **array)
{
}
int main()
{
   int array[][]= {{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};
   myFuntion(array);
   return 0;
}

在函数“int main()”中:第 5 行:错误:将“array”声明为多维数组必须具有所有维度的边界,但由于 -Wfatal 错误而终止的第一个编译除外。

如果可能的话,任何人都可以清除我对此和一些文档的疑问,以解决我的更多疑问。

4

6 回答 6

7
  void myFunction(int arr[][4])

您可以在第一个 [] 中输入任何数字,但编译器会忽略它。将向量作为参数传递时,您必须指定除第一个维度之外的所有维度。

于 2012-10-20T20:59:54.920 回答
1

您至少应该指定第二维的大小。

int array[][5] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8, 9 }, { 10, 11, 12, 13 } };

还有一个经常重复的错误。要将二维数组作为参数传递,您必须使用以下类型:

void myFuntion(int (*array)[SIZE2]);
/* or */
void myFuntion(int array[SIZE1][SIZE2]);
于 2012-10-20T16:59:33.693 回答
1

为什么不使用 std::vector 而不是“原始”数组。优点:
1、可以动态增长。
2. 将参数传递给函数没有问题。即尝试调用 void myFuntion(int array[SIZE1][SIZE2]); 使用数组,它有一些不同的大小而不是 SIZE1 和 SIZE2

于 2012-10-20T17:02:42.077 回答
1

另一个模板化解决方案是:

template<int M, int N>
void myFunction(int array[N][M])
{
}
于 2019-03-06T17:41:16.343 回答
0
#include<iostream>
 void myFuntion(int arr[3][4]);
int main()
  {
  int array[3][4]= {{1,2,3,4},{5,6,7,8},{10,11,12,13}};
 myFuntion(array);
  return 0;
 }
   void myFuntion(int arr[3][4])
   {

   }

http://liveworkspace.org/code/0ae51e7f931c39e4f54b1ca36441de4e

于 2012-10-20T17:02:55.300 回答
0

将“数组”声明为多维数组必须具有除第一个维度之外的所有维度的边界所以你必须给出

array[][size] //here you must to give size for 2nd or more 

为了在函数中传递数组,数组不是指向指针的指针,而是指向数组的指针,所以你可以这样写

fun(int (*array)[])

在这里,如果您错过了 (*array) 周围的括号,那么它将是一个指针数组,因为运算符 [] 的优先级高于 *

于 2012-10-20T17:10:03.523 回答