传递二维数组作为参数

11

我正在尝试将一个二维数组传递给一个接受指针的函数,而我已经学习到一个二维数组实际上是一个指向指针(指向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行:错误:声明'multidimensional array'的'array'必须为除第一维以外的所有维度指定边界 由于-Wfatal-errors,编译终止。

有人能否解答我的疑惑,并提供一些可能解决我其他疑问的文档。


2
数组不是指针。它不是指向指针的指针,当它被传递到函数中时,它会衰减为指向数组的指针。 - chris
数组[][]必须定义一些大小。我猜我们不能指定一个没有指定大小的数组。 - Afaq
@FatimaZohra,实际上,你需要指定其他维度,而不是第一个。无论如何,这是一个int指针的2D数组,OP,你的集合需要包含相同数量的元素,以便你可以指定第二个维度。 - chris
错误:无法将'int (*)[4]'转换为'int **',以便将其作为参数'1'传递给'void myFuntion(int **)'。这是什么意思?我试图传递myFunction(array); - yogi
显示剩余4条评论
6个回答

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

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


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]);

请问您能否对这个[链接]codepad.org/n8GRm9dU[/链接]进行评价?错误:- 错误:无法将'int () [4]'转换为' int *',用于参数'1'到'void myFunction(int **)',为什么我尝试传递myFunction(array)时会出现这种情况? - yogi
你能解释一下这个的逻辑吗? void myFunction(int (*array)[SIZE2]); - yogi
array 被声明为一个指向大小为 SIZE2 的数组的指针。这里的 SIZE2 是你的第二维度的大小。 - md5
实际上这两个是相同的 ---> int (array)[SIZE2] = int array[SIZE1][SIZE2]).......................................... array[SIZE1][SIZE2] = ((array + SIZE1)[SIZE2]) = (*(array + 0)[SIZE2]) = *array[SIZE2]。这里编译器忽略了第一个参数,因此SIZE1 = 0。 - Raj Kumar Mishra

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

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


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

0

0

声明‘array’为多维数组时,除第一维外,所有维度都必须有边界。

所以你必须给出

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

在函数中传递数组时,数组不是指向指针的指针,而是指向数组的指针,因此您可以这样编写

fun(int (*array)[])

如果你忘记在 (*array) 周围加上括号,那么它将成为指针数组,因为 [] 运算符的优先级高于 * 运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接