传递二维数组作为参数

时间:2012-10-20 16:45:57

标签: c++ pointers

我正在尝试将2-d数组传递给接受指针指针的函数。我已经知道,2-d数组不是指向指针的指针(指向1-D数组的指针)。我编译下面的代码时遇到了这个错误。

#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-errors而导致编译终止。

任何人都可以清楚我对这个和一些文档的疑问,如果可能的话,我会更加怀疑。

6 个答案:

答案 0 :(得分:2)

  void myFunction(int arr[][4])

你可以在第一个[]中加上任何数字,但编译器会忽略它。将矢量作为参数传递时,必须指定所有尺寸,但必须指定第一个尺寸。

答案 1 :(得分:1)

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

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

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

void myFuntion(int (*array)[SIZE2]);
/* or */
void myFuntion(int array[SIZE1][SIZE2]);

答案 2 :(得分:1)

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

答案 3 :(得分: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

答案 4 :(得分:0)

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

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

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

fun(int (*array)[])

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

答案 5 :(得分:0)

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

template<int M, int N>
void myFunction(int array[N][M])
{
}