0

如何将二维数组传递给函数我已经创建了一个并想定义初始化这个数组的函数。

#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

4 回答 4

1

数组不是指针。当传递给函数时,只有数组的“第一”(主要)维度可以衰减为指针。否则,如果您有一个多维数组,则必须在函数参数列表中相应地声明它:

void funcTaking2DArray(int (*arr)[5])
{
    // do stuff
}

int array[10][5];
funcTaking2DArray(array);
于 2013-04-06T08:11:57.417 回答
1

使用尺寸:

void wypelnijTabliceBooli(bool b[n][n])

您可以将它作为指向数组的指针传递,但除了“最外层”维度之外的所有维度都需要知道:

void wypelnijTabliceBooli(bool (* b)[n])

编辑:我接受这需要 GNU 或其他具有高于 C++ 标准的扩展的编译器。另一种方法是创建n一个 const 值。

于 2013-04-06T08:12:18.933 回答
0

似乎您希望数组的大小灵活。您可以将 b 声明为:

bool** b = new bool*[n]
for (i=0; i<n; i++)
    b[i] = new bool[n]
于 2013-04-06T08:18:37.007 回答
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}};

在内存中,这将是这样的(其中 [] 表示内存块):

[真][真][假][假][假][真]

现在只传递一个指向它的指针,你就无法知道这是array[3][2]还是array[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)。

于 2013-04-06T08:19:09.140 回答