二维数组
1.声明
int arr[3][4];
arr是一个3行4列的矩阵
注意:二维数组的行可以省略,但列不可以省略。不然无法确定如何存放。
2.初始化
两种形式:
int arr[3][4]={1,2,3,4,3,4,5,6,5,6,7,8};
int arr[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};
数组arr | col1 | col2 | col3 | col4 |
---|---|---|---|---|
row1 | 1 | 2 | 3 | 4 |
row2 | 3 | 4 | 5 | 6 |
row3 | 5 | 6 | 7 | 8 |
3.二维数组的理解
3.1 二维数组可以看作是一维数组的数组。
3.2 int arr[3][4];
arr是一个内含3个数组元素的数组,
每个数组元素内含4个int类型的元素。
3.3 arr中的3个数组元素为arr[0]
、arr[1]
、arr[2]
,
数组arr[0]
中的4个元素为arr[0][0]
、arr[0][1]
、arr[0][2]
、arr[0][3]
。
3.4 int arr[3][4] = { {1,2,3,4},{3,4,5,6},{5,6,7,8} };
第一行的元素为:arr[0] [0]、arr[0] [1]、arr[0] [2]、arr[0] [3],
可以把arr[0]看作是二维数组第一行元素组成的数组的数组名,后面方括号内变化的是下标。
所以 arr[0]
是二维数组arr的首元素,同时也是二维数组第1行元素组成的一维数组的数组名。
3.5二维数组的数组名表示二维数组首元素的地址,即数组arr[0]
的地址,也是二维数组第一行的地址。
3.6 二维数组在内存中是逐行连续存放的。
故可将其看作一个有12个元素的一维数组。int arr[12]
与int arr[3][4]
在内存中的布局方式一样,只是访问的形式不同。
4.数组名的意义
声明一个数组时,编译器将根据生命所指定的元素数量为数组保留内存空间。然后再创建数组名,它的值是一个常量,指向这段空间的起始地址。
一般情况下,数组名表示首元素地址,是一个指针常量,不可修改。
但有两种情况是例外:
1.sizeof(数组名) 这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。
2.&(数组名) 这里的数组名表示整个数组,取出的是整个数组的地址,产生的是一个指向数组的指针。