4.2 二维数组和多维数组 1.多维数组界说0 ~% e! w! g5 a7 M& l
数组也可所以多维的。现以二维数组为例介绍二维及二维以上的多维数组。二维数组的界说形式为:. m$ A) A3 ~; Y9 I4 y. z# c
类型声名符 数组名「常量表达式」[常量表达式」;
9 ?) Z% F& E4 @' Q* T. ? 凡是多维数组的界说形式有持续两个或两个以上“「常量表达式」”。例如:$ b8 i) M. Z* ?9 E
float a[2][3],b[3][4]; /*两个二维数组*/
: V1 J) T% M1 k. u" D: e4 ?8 Z float c[2][2][3];/*一个三维数组*/
! g5 |3 H, K% v) o2 ~ 界说数组a为2行3列,数组b为3行4列。C说话把二维数组看作是一种非凡的一维数组,即它的元素又是一个数组。例如,对于上述界说的数组a,把它看作有两个元素的一维数组:9 o" k( ~5 G9 x9 G) A& s
a[0]和 a[l]7 T, y" N( z, `3 r, _
每个元素又是一个包含3个元素的一维数组。凡是,一个n维数组可看作是一个一维数组,而它的元素是一个(n-1)维的数组。C说话对多维数组的这种不雅概念和措置体例,使数组的初始化、引用数组的元素以及用指针暗示数组带来很大的便利。
/ h9 Z! H4 V* A' S# ^ 在C说话中,二维数组的元素的存放挨次是按行存放的,即从数组的首地址起头,先挨次存放第一行的元素,再存放第二行的元素。凡是,对于一个多维数组,它的元素在内存中的存放挨次有这样特点:第一维的下标转变最慢,最右边的下标转变最快。' ` m% L) I: n
2.引用多维数组元素
0 p+ K( ?% a, Z 引用二维数组元素的暗示形式为:# f% |2 [$ K. k& w! W6 q
数组名[下标][下标]2 ^' X! _7 I* `5 V/ Z
凡是,引用n维数组元素的暗示形式为数组名之后紧接持续n个“[下标]”。/ |/ e$ p5 ]' n9 q) p; l2 v. m
在用下标引用数组的元素时,应该注重下标值的有用性,应在已界说的对应维巨细典型围内,即大于等于0和小于对应维的元素个数。, G& `. Y0 L. L0 D& F
3.多线数组初始化
9 G5 l6 C% t* b9 U3 X. s, `& i 多维数组的初始化体例也有多种,以二维数组的初始化体例为例声名其初始化体例。% `! W! A& R4 H
(1)按行给二维数组的全数元素赋初值。例如:7 }" K! o0 e2 ?. l w
int al[2][3]={{1,2,3 },{4,5,6 }};
" Q3 x I; V2 q- a1 y) Z6 } 这种赋初值体例斗劲直不美观,第一个花括弧内的数据给第一行的元素赋初值,第二个花括弧内的数据给第二行的元素赋初值,依次类推,按行给数组的全数元素赋初值。
1 l0 w; T6 H/ u (2)按元素的存储挨次给数组元素赋初值。例如:! s2 n% C* g- d6 U* X1 B& d
int a2[2][3]={1,2,3,4,5,6 };' F O A0 `4 j7 k6 v, N/ Z
这种赋初值体例结构性差,轻易漏失踪。
8 V1 c# |5 [& @" H6 \5 f1 `, ] (3)按行给数组的部门元素赋初值。例如:1 g8 @+ t g( u+ K, `6 i q7 \5 r7 M
int a3[2][3]={{1,2},{0,5}};
X A/ _' t, q- e" f; ], b) Y 其效不美观是使a3[0][0]=l,a3[0][1]=2,a3[1][0]=0,a3[1][l]=5,其长时为0。
* _4 g G% L4 t0 C" W4 {1 B (4)按元素的存储挨次给前面部门元素赋初值。例如:% n3 @; V4 u1 u, p' {& D7 q, L
int a4[2][3]={1,2,3,4 };
8 K/ u* u0 h9 A 其效不美观是使a4[0][0]=1,a4[0][l]=2,a4[0][2]=3,a4[1][0]=4,其长时为0。0 c2 L' \& r+ l3 r$ o
(5)按元素的存储挨次,给数组部门或全数元素赋初值,而且不指定第一维的元素个数。例如:' t, `" H$ i: Y" I7 W- I$ o+ K
int a5[][3]={l,2,3,4,5 };3 b4 V" y, O) L
系统会按照结出的初始数据个数和其它维的元素个数确定第一维的元素个数。其效不美观是使:; Q' e% t1 ]3 D) `7 ~2 [5 g2 d
a5[0][0]=1,a5[0][1]=2,a5[0][2]=3,
4 y, @9 c" @* W a5[1][0]=4,a5[l][l]=5,a5[1][2]=0。
3 O, r* V* \2 [( }2 e 所以数组a5有2行。- A) o7 }) `2 |" r& ~2 A$ H
(6)用按行赋初值体例,对各行的部门或全数元素赋初值,并省略第一维的元素个数。例如:. V, }) V9 j% ^! T! Z* E# t
int a6[][3]={{O,2},{}};
0 v, d0 C0 d5 h! ~/ z: F2 {, r 也能确定数组a6共有2行。 |