◆ 概要
本文以 3 行 2 列的二维数组为例,介绍了如何声明自动存储、静态存储和动态存储的二维数组,及其如何将它们作为函数参数进行传递的方式。
◆ 实现
处理自动存储或静态存储的二维数组,
...
// Assigning to auto or static array.
void assign(int row, int (*array)[2]);
// Outputting auto or static array.
void output(int (*array)[2], int row);
...
int staticarray[3][2]; // #1
int main() {
assign(3, staticarray); // #2
int autoarray[3][2]; // #1
assign(3, autoarray); // #2
...
std::printf("Outputting static array...\n");
output(staticarray, 3); // #2
std::printf("Outputting auto array...\n");
output(autoarray, 3); // #2
...
}
在声明时,需在数组名后指定维数的大小(#1)。将它们传递给函数时,需要把行数和数组名传递给函数(#2)。
处理动态存储的二维数组,
...
// Assigning to dynamic array.
void assign(int row, int column, int** array);
// Outputting dynamic array.
void output(int** array, int row, int column);
...
int main() {
...
int** dynamicarray1 = new int*[3];
for (int i = 0; i < 3; ++i) dynamicarray1[i] = new int[2]; // #1
assign(3, 2, dynamicarray1); // #3
int** dynamicarray2 = new int*[3];
int* data = new int[3*2]; // #2
for (int i = 0; i < 3; ++i) dynamicarray2[i] = data + 2 * i;
assign(3, 2, dynamicarray2); // #3
std::printf("Outputting dynamic array 1...\n");
output(dynamicarray1, 3, 2); // #3
std::printf("Outputting dynamic array 2...\n");
output(dynamicarray2, 3, 2); // #3
...
}
在声明时,可以考虑两种方法。方法一(#1),逐行分配内存,不保证各行间的内存连续;方法二(#2),一次分配全部内存,保证各行间的内存连续。将它们传递给函数时,需要把行数、列数和数组名传递给函数(#3)。
◆ 验证
编译代码(-std=c++11)成功后运行可执行文件。以下是执行结果的输出,
Outputting static array...
1 2
2 4
3 6
Outputting auto array...
1 2
2 4
3 6
Outputting dynamic array 1...
1 2
2 4
3 6
Outputting dynamic array 2...
1 2
2 4
3 6
◆ 最后
完整示例代码请参考 [gitee] cnblogs/17155320 。
标签:...,Outputting,int,dynamic,函数参数,二维,数组,output,array From: https://www.cnblogs.com/green-cnblogs/p/17155320.html