一维数组本身是多个大小相同的内存块,从0开始逐渐递增所组成的在横向上的有序"组合",
二维数组就是很多个一维数组在纵向上的组合,每一个一维数组就是二维数组在纵向上的从0开始的逐渐递增的一个单位,(所以一维数组在二维数组的基础上,每一个内存块都是不能缺少的)
二维数组作为形参传递时,和一维数组数组是一样的,不是简单的值传递,传递的是数组本身的地址
二维数组在定义的时候必须指定列数,,行数的元素在有元素的情况下剩余元素会补充为0,列数决定这个二维数组的完整性
二维数组的定义和一维数组一样(注:二维数组作为全局变量进行声明的时候若没有赋初始值,则默认补充为零,但是作为局部变量定义没有赋初始值的时候则会是随机值)
#include <iostream>
using namespace std;
void putoutArray(int a[3][4]) {
for (int i = 0; i < 3; i++){
for (int j = 0; j < 4; j++) {
cout << a[i][j]<<" ";
}
cout << endl;
}
}
//作为全局变量进行定义
int test3[3][4];
int main(void) {
//作为局部变量定义
int test4[3][4];
cout << "作为全局变量时" << endl;
putoutArray(test3);
cout << "作为局部变量时" << endl;
putoutArray(test4);
return 0;
}
int test1[3][4] = {
?? ?{1,2,3,4},
?? ?{5,6,7,8},
?? ?{9,10,11,12}
};
注:最外围括号内部的每个括号相当于初始化一行,括号中可以省略某些元素的初始化.会默认补充为0;
int test2[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
#include <iostream>
using namespace std;
void putoutArray(int a[3][4]) {
for (int i = 0; i < 3; i++){
for (int j = 0; j < 4; j++) {
cout << a[i][j]<<" ";
}
cout << endl;
}
}
int main(void) {
cout << "第一种初始化方式" << endl;
//在定义的时候初始化
int test1[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
putoutArray(test1);
cout << "第二种初始化方式" << endl;
//在定义的时候初始化从头开始依次补充后面的值
int test2[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
putoutArray(test2);
return 0;
}
设置断点调试,可以看到二位数组中的所有元素在内存中的存储方式
根据数据可以看到二维数组和一维数组一样也是有序的存放在内存空间的