将2维数组传递给c ++中的函数

时间:2013-04-06 08:05:21

标签: c++ multidimensional-array

如何将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**)'|

4 个答案:

答案 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)。