一、问题
有⼀个考试,共有10⼈参加,10 个⼈的考试成绩可以⽤⼀维数组表示。如果说还是 10 个⼈考试,每个⼈考5科,这样就有50 个考试成绩,这时可以⽤⼆维数组来表示。在 C语⾔中,怎样定义⼆维数组呢?
二、解答
⼆维数组的定义和⼀维数组⼤致相同,只是⽐⼀维数组多了⼀个常量表达式,其⼀般形式如下:
数据类型说明符 数组名[常量表达式1][常量表达式2];
“类型说明符”⽤来说明数组中元素的数据类型。“数组名〞唯⼀标识该⼆维数组。 第⼀个⽅括号“ [ ] ”中的常量表达式1标识第⼀维下标的长度,第⼆⽅括号“ [ ] ”中常量表达式2标识第⼆维下标的长度。
“常量表达式 1”被称为⾏下标,“常量表达式2”被称为列下标。如果有⼆维数组a[n][m],则⼆维数组的下标取值范围如下:
(1)⾏下标的取值范围是 0~n-1。
(2)列下标的取值范围是 0~m-1。
(3)⼆维数组的最⼤下标元素是 a[n-1][m-1]。 10 个⼈考试的问题就可以定义为:
int a[10][5];
这是⼀个10⾏5列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有10×5个,即:
a[0][0],a[0][1],a[0][2],...,a[0][9]
...
...
...
a[4][0],a[4][1],a[4][2],...,a[4][9]
在C语⾔中,⼆维数组是按⾏排列的,即按⾏顺次存放,先存放 a[0]⾏内所有数组元素,再存放 a[1]⾏的所有数组元素。
⼆维数组可以看做是⼀维数组的拓展,也可以看成是特殊的⼀维数组。例如 “int a[10][5];”,可以理解为⼀维数组中四个元素 a[0]、a[1]、…、a[9],每个元素又包含五个数组元素。
二维数组名 | 一位数组名 | 数组元素 |
a | a[0] | a[0][0] , a[0][1] , a[0][2] , ... , a[0][9] |
a | a[1] | ... |
a | a[2] | ... |
a | a[3] | ... |
a | a[4] | a[4][0] , a[4][1] , a[4][2] , ... , a[4][9] |
这⾥ a[0]、a[1]、a[2]不能当做数组元素使⽤,只能作为数组名,因为它们⼰经不是单纯的数了。
三、总结
多维数组的定义与⼆维数组相似。