在c++中传递二维数组给函数

Passing 2dimemnsional array to the function in c++

本文关键字:二维数组 函数 c++      更新时间:2023-10-16

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

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

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

使用尺寸:

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

你可以把它作为指向数组的指针传递,但是除了"最外层"之外的所有维度都需要知道:

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

编辑:我接受这一点,在其他一切未修改的情况下,需要GNU或其他具有高于c++标准扩展的编译器。另一种方法是使n为const值。

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

bool** b = new bool*[n]
for (i=0; i<n; i++)
    b[i] = new bool[n]

只要我知道你什么时候使用:

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}};

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

[事实][事实](假)(假)(假)(真正的)

,现在你无法知道它是数组[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)。