在c++中传递二维数组给函数
Passing 2dimemnsional array to the function in c++
如何将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)。
相关文章:
- 在函数中传递二维数组
- C++函数中推广二维数组
- 如何将 50 行和 50 列的二维数组编码为一个为元素随机分配星号的函数?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 如何在 c++ 中初始化构造函数中的二维数组
- 编写一个可以使二维数组平坦的函数
- 二维数组传入没有全局定义 (M x N) 的函数
- 如何将二维数组作为类中的私有变量,然后在构造函数中设置它
- 如何在函数中将二维数组作为参数传递,并在 C++ 中返回二维数组
- 类的二维数组和C++中的构造函数调用
- 将二维数组传递到只需要一维数组的函数中(C++)
- 接受来自函数的二维数组(int 类型)并将其返回到主函数
- 二维数组的递归函数
- 如何制作返回C 中二维数组的函数
- 通过指针将二维数组传递给 c++ 中的函数
- C++:传递二维数组以执行函数
- 如何在C++中将动态二维数组传递给函数
- 将二维数组从数据文件传递给函数并输出内容
- 将二维数组传递给函数会产生奇怪的错误
- 二维数组 - 函数