我正在尝试将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而导致编译终止。
任何人都可以清楚我对这个和一些文档的疑问,如果可能的话,我会更加怀疑。
答案 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])
{
}