二维数组的创建
在要储存多组数据时,如果还用一维数组的话就要创建多个一维数组且这几个数组的数据在内存中还不一定连续,那么这种情况就可以用二维数组来把这几组数组存储到一起
这样就有了行列
那么命名数组的时候就时arr[行数][列数】
二维数值的初始化
1.每一组都用{}起来
这里也可以不完全初始化
每组剩余未定义元素自动初始化为0
用{}起来的二维数组在创建时可以把【】里的行数省略,但不可以把【】里的列(每个组的元素个数)省略
int main() {
int arr1[][4] = { {1,2,3},{4,5,6},{2,3,4,5,} };//省略行,但在后面的初始化时,有几个{}就已经表明了有行,但是列数不能省略,因为列数省略后根本不知道一行到底有几个数
return 0;
}
2.不用{}起来
不用{}起来的不完全初始化
有几个元素没初始化就从最后一组倒着补0
二维数组的使用(访问)
二维数组的行列下标也是从0开始的
所以在访问arr1[3][4】的最后一个元素时应该是arr[2】[3】
nt main() {
int arr1[3][4] = { {1,2,3,4},{4,5,6,7},{4 ,3,4,5} };
printf("%d", arr1[2][3]);//5
return 0;
}
依次访问二维数组的每一个元素
int main() {
int arr1[3][4] = { {1,2,3,4},{4,5,6,7},{4 ,3,4,5} };
//printf("%d\n", arr1[2][3]);//5
int i = 0;
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 4; j++) {
printf("%d", arr1[i][j]);
}
printf("\n");
}
return 0;
二维数组在内存中的存储
int main() {
int arr1[3][4] = { {1,2,3,4},{4,5,6,7},{4,3,4,5} };
//printf("%d\n", arr1[2][3]);//5
int i = 0;
for (i = 0; i < 3; i++) {
int j = 0;
for (j = 0; j < 4; j++) {
printf("&arr[%d][%d] = %p\n",i,j,&arr1[i][j]);
}
//printf("\n");
}
return 0;
}
运行结果:
从运行结果可以看出来每个元素之间隔4个字节,所以二维数组的数组在内存中是连续存放的