数组(二)
1.数组声明(二维数组)
1.1 数组还可以把存储区进行分组
第一组 第二组
| **** **** **** | **** **** **** |
1.2 一维数组不可以表示存储区的分组情况,多维数组才可以表示存储区的分组情况。二维数组是最常见的多维数组,它只能表示一次分组情况。
arr[2][3]={1,2,3,4,5,6}//第一组中1,2,3,第二组中4,5,6;
1.3 为了表示二维数组里的存储区需要提供两个下标。可以采用双重循环依次处理二维数组里的每个存储区。
1.4 二维数组也应该进行初始化。二维数组可以象一维数组一样进行初始化。可以对初始化数据进行分组,如果可以根据初始化数据个数计算出分组个数就可以省略二维数组声明里的分组个数(下列程序可以依次把注释去掉,观察二维数组初始化情况)。
/*
* 二维数组演示
* */
#include <stdio.h>
int main() {
//int arr[3][2] = {1, 2, 3, 4, 5, 6};
//int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
//int arr[3][2] = {{1, 2}, {3}, {5, 6}};
//int arr[3][2] = {1, 2, 3, 5, 6};
//int arr[][2] = {1, 2, 3, 5, 6};
int arr[][2] = {{1}, {2}, {3}};
int row = 0, col = 0, cnt = 1;
//arr[1][0] = 10; //前面的下标是组下标,后面的下标是组内下标
/*for (row = 0;row <= 2;row++) {
for (col = 0;col <= 1;col++) {
arr[row][col] = cnt;
cnt++;
}
}*/
for (row = 0;row <= 2;row++) {
for (col = 0;col <= 1;col++) {
printf("%d ", arr[row][col]);
}
printf("\n");
}
return 0;
}
1.5 二维数组名称可以代表数组里第一个存储区的地址。
int arr[3][2];
| **** **** | **** **** | **** **** |
^
*
*
*
arr
注:二维数组名称不可以被赋值
1.6 可以对二维数组名称进行sizeof计算,结果是二维数组里所有存储区的总大小。
二维数组名称后也可以只使用一个下标,这个下标是组下标。
int arr[3][2]
组下标为0 组下标为1 组下标为2
| **** **** | **** **** | **** **** |
^
*
*
arr[1]
arr[num]表示组下标为num那一组里第一个
存储区的地址
二维数组里每组存储区可以看做是一个一维数组,二维数组名称后加组下标可以作为这个一维数组的名称使用
int arr[3][2]
组下标是0 组下标是1 组下标是2
| **** **** | **** **** | **** **** |
---------
arr[1]
/*
* 二维数组演示
* */
#include <stdio.h>
int main() {
int arr[3][2] = {0};
printf("arr是%p\n", arr);
printf("&arr[0][0]是%p\n", &arr[0][0]);
printf("sizeof(arr)是%d\n", sizeof(arr));
printf("arr[1]是%p\n", arr[1]);
printf("&arr[1][0]是%p\n", &arr[1][0]);
printf("sizeof(arr[1])是%d\n", sizeof(arr[1]));
return 0;
}
2.练习
编写二维数组,实现以下输出结果:
11112
40002
40002
40002
43333
/*
* 二维数组练习
* */
#include <stdio.h>
int main() {
int arr[5][5] = {0};
int row = 0, col = 0;
for (row = 0;row <= 4;row++) {
for (col = 0;col <= 4;col++) {
if (!row && col <= 3) {
//第一组的前四个存储区
arr[row][col] = 1;
}
else if (row <= 3 && col == 4) {
//前四组的最后一列
arr[row][col] = 2;
}
else if (row == 4 && col >= 1) {
//最后一组的后四个存储区
arr[row][col] = 3;
}
else if (row >= 1 && !col) {
//后四组的最后一列
arr[row][col] = 4;
}
}
}
for (row = 0;row <= 4;row++) {
for (col = 0;col <= 4;col++) {
printf("%d", arr[row][col]);
}
printf("\n");
}
return 0;
}