一維數組隻有一個下標,而實際問題中有很多量是二維的甚至多維的,因此C語言允許構造多維數組。多維數組元素有多個下標,以標識它在數組中的位置。本節隻介紹二維數組,多維數組可由二維數組類推而得到。
定義二維數組的語法格式為:
數據類型數組名[常量表達式1][常量表達式2];
其中“常量表達式1”表示第一維下標(行標)的長度,“常量表達式2”表示第二維下標(列標)的長度。二維數組占用字節數=行標×列標×sizeof(數據類型)。例如:intarray[3][4];說明了一個3行4列的數組,數組名為array,其元素值的類型為整型,該數組共有3×4個元素,占用24個字節,各個數組元素下標如下所示:
array[0][0]array[0][1]array[0][2]array[0][3]
array[1][0]array[1][1]array[1][2]array[1][3]
array[2][0]array[2][1]array[2][2]array[2][3]
二維數組在概念上是二維的,即其下標在兩個方向變化,元素在數組中的位置也處於一個平麵之中,而不是像一維數組隻是一個方向,但其內存卻是按一維線性排列的。如何在一維存儲器中存放二維數組?有兩種方式:一種是按行存儲,即元素放完一行之後順次放入下一行,C語言的二維數組正是按行排列的;另一種是按列存儲,即放完一列之後再順次放入下一列,例如FORTRAN語言。
二維數組的初始化也是在類型說明時給各元素賦以初值。二維數組可按行分段賦值,也可按行連續賦值。例如對數組array[3][4]:
(1)按行分段賦值可以寫為:
intarray[3][4]={{85,74,92,65},{71,59,85,90},{76,63,70,77}};
(2)按行連續賦值可寫為:
intarray[3][4]={85,74,92,65,71,59,85,90,76,63,70,77};
這兩種賦初值的結果是完全相同的。
建議讀者使用按行分段賦值,這樣書寫程序清晰明了,不易出錯。
對於二維數組初始化賦值還需要注意以下幾點規定:
(1)可以隻對部分元素賦初值,未賦初值的元素自動取0值。
例如:intarray[3][4]={{1,2},{3},{4,5,6}},賦值後的各元素值為1,2,0,3,0,0,4,5,6。
(2)如對全部元素賦初值,則第一維的長度可以不給出。
例如:intarray[3][4]={0,1,2,3,4,5,6,7,8,9,10,11},等價於intarray[][4]={0,1,2,3,4,5,6,7,8,9,10,11}。
[例75]編寫程序,求出一個3×4的矩陣中最大元素的值及其所在行、列的位置。
#include
#defineM3
#defineN4
voidmain()
{inti,j,max,row,column;
intarray[M][N];
row=column=0;
printf("inputvalues:\n");
for(i=0;i
#defineSNO4/*設學號從1開始*/
#defineCOURSE4/*四門課程考試成績*/
#defineSUM5/*總分位於第6列*/
#defineAVG6/*平均成績位於第7列*/
voidmain()
{inti,j,sum,avg;
intstu[SNO+1][AVG+1];
printf("inputscores:\n");
printf("Math\tEnglish\tPhysics\tC\tSum\tAvg\n");
for(i=1;i