如何将2d数组传递给函数我创建了一个并想要定义初始化该数组的函数。
#include <iostream>
using namespace std;
int n = 5;**strong text**
void wypelnijTabliceBooli(bool** b){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++)
b[i][j] = 0;
}
}
int main(){
bool b[n][n];
wypelnijTabliceBooli(b);
return 0;
}
我得到了
error: cannot convert 'bool (*)[(((unsigned int)(((int)n) + -0x000000001)) + 1)][(((unsigned int)(((int)n) + -0x000000001)) + 1)]' to 'bool**' for argument '1' to 'void wypelnijTabliceBooli(bool**)'|
答案 0 :(得分:1)
数组不是指针。当传递给函数时,只有数组的“第一”(显性)维度可以衰减成指针。否则,如果您有一个多维数组,则必须相应地在函数参数列表中声明它:
void funcTaking2DArray(int (*arr)[5])
{
// do stuff
}
int array[10][5];
funcTaking2DArray(array);
答案 1 :(得分:1)
使用尺寸:
void wypelnijTabliceBooli(bool b[n][n])
您可以将其作为指向数组的指针传递,但除了“最外层”维度之外的所有维度都需要知道:
void wypelnijTabliceBooli(bool (* b)[n])
编辑:我接受这一点,其他所有未经修改的,都要求GNU或其他编译器具有高于C ++标准的扩展。另一种方法是使n
为const值。
答案 2 :(得分:0)
您似乎希望数组的大小具有灵活性。您可以将b声明为:
bool** b = new bool*[n]
for (i=0; i<n; i++)
b[i] = new bool[n]
答案 3 :(得分:0)
只要我知道你何时使用:
void wypelnijTabliceBooli(bool** b){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++)
b[i][j] = 0;
}
}
你不能使用索引来解决bool二维数组。发生这种情况是因为二维数组存储在连续的内存位置,如果不提供至少一个数组维,则无法知道何时知道给定的“行结束”。例: 想象一下你有一个bool阵列:
bool myArray[2][3]={{true,true,false},{false,false,true}};
在内存中,这将是这样的(其中[]表示内存块):
[TRUE] [TRUE] [FALSE] [FALSE] [FALSE] [TRUE]
并且现在只传递指针,你无法知道这是数组[3] [2]还是数组[2] [3]。
这是通过传递给除数组的一个维度之外的所有函数来解决的,如下所示:
void wypelnijTabliceBool(bool b[][3] ){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++)
b[i][j] = 0;
}
}
(如果你的第二个维度是3)。