山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省
一維數組是數組中最簡單的,它的元素只需要用數組名加一個下標,就能唯一地確定。如上面介紹的學生成績數組s就是一維數組。有的數組,其元素要指定兩個下標才能唯一地確定,如用s?,?表示“第2班第3名學生的成績”,其中第1個下標代表班,第2個下標代表在本班中的學生序號。此時,s就是二維數組。還可以有三維甚至多維數組,如用s?,?,?表示“4年級2班第3名學生的成績”,此時,s就是三維數組。它們的概念和用法基本上是相同的。熟練掌握一維數組后,對二維或多維數組,很容易舉一反二,迎刃而解。
怎樣定義一維數組
要使用數組,必須在程序中先定義數組,即通知計算機:由哪些數據組成數組,數組中有多少元素,屬于哪個數據類型。否則計算機不會自動地把一批數據作為數組處理。例如,下面是對數組的定義:
int a [ 10?];
它表示定義了一個整型數組,數組名為a,此數組包含10個整型元素。
定義一維數組的一般形式為
類型說明符 數組名[常量表達式];
說明:
( 1 )數組名的命名規則和變量名相同,遵循標識符命名規則。( 2 )在定義數組時,需要指定數組中元素的個數,方括號中的常量表達式用來表示元意的個數,即數組長度。例如,指定a [ 10 ],表示a數組有10個元素。注意,下標是從0開始的,這10個元素是a [ 0 ],a [ 1 ] ,a [ 2 ] , a [ 3 ] , a [ 4 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] , a [ 8 ],a [ 9 ]。請特別注意,按上面的定義,不存在數組元素a [ 10 ]。
( 3 )常量表達式中可以包括常量和符號常量,如“int a [ 3 + 5 ];”是合法的。不能包含變量,如“inta「n ];”是不合法的。也就是說,C語言不允許對數組的大小作動態定義,即數組的大小不依賴于程序運行過程中變量的值。例如,下面這樣定義數組是不行的:
int n ;
scanf ( " % d”,& n );/ /企圖在程序中臨時輸入數組的大小
int a [ n ];
用“int a [ 10 ];”定義了數組a后,在內存中劃出一片存儲空間,存放了一個有10個整型元素的數組(如果用VisualC++,此空間大小為4×10 = 40字節)。可以看到,用一個
“int a [ 10 ];”,
就相當于定義了10個簡單的整型變量,顯然簡捷方便。
怎樣引用一維數組元素
在定義數組并對其中各元素賦值后,就可以引用數組中的元素。應注意:只能引用數下組元素而不能一次整體調用整個數組全部元素的值。
引用數組元素的表示形式為
數組名[下標]
例如,a [ 0 ]就是數組a中序號為0的元素,它和一個簡單變量的地位和作用相似。“下標”可以是整型常量或整型表達式。例如下面的賦值表達式包含了對數組元素的引用:
a [ 0 ] = a [ 5 ] + a [ 7 ] - a [ 2×3 ]
每一個數組元素都代表一個整數值。
注意:
定義數組時用到的“數組名[常量表達式]”和引用數組元素時用的“數組名[下標]”形式相同,但含義不同。例如:
int a [ 10 ];/ /前面有int,這是定義數組,指定數組包含10個元素
t = a [ 6 ] ; / /這里的a [ 6 ]表示引用a數組中序號為6的元素
例題:
對10個數組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。
解題思路:
顯然首先要定義一個長度為10的數組,由于賦給的值是整數,因此,數組可定義為整型,要賦的值是0 ~ 9,有一定規律,可以用循環來賦值,同樣,用循環來輸出這10個值,在輸出時,先輸出最后的元素,按下標從大到小輸出這10個元素,這個算法很簡單,可以直接寫出程序。
編寫程序:
運行結果:
程序分析:
第1個for循環使a[0]?~ a [9]的值為0 ~ 9,第2個for循環按a [9] ~ a [0]的順序輸出各元素的值。
應當特別提醒的是:數組元素的下標從0開始,如果用“int a [ 10 ];”定義數組,則最大下標值為9,不存在數組元素a[10]。
一維數組的初始化
為了使程序簡潔,常在定義數組的同時給各數組元素賦值,這稱為數組的初始化。可以用“初始化列表”方法實現數組的初始化。在定義數組時對全部數組元素賦予初值。例如:
int a [ 10 ] = ( 0,1,2,3,4,5,6,7,8,9 );
將數組中各元素的初值順序放在一對花括號內,數據間用逗號分隔。花括號內的數據就稱為“初始化列表”。
經過上面的定義和初始化之后,a [ 0 ] = 0,a [ 1 ] = 1,a [ 2 ] = 2,a [ 3 ] = 3,a [ 4 ] = 4,a[ 5 ] = 5,a [ 6 ] = 6,a [ 7 ] = 7,a [ 8 ] = 8,a [ 9 ] = 9。
( 2 )可以只給數組中的一部分元素賦值。例如:int a [ 10 ] = ( 0,1,2,3,4 );定義a數組有10個元素,但花括號內只提供5個初值,這表示只給前面5個元素賦初值,系統自動給后5個元素賦初值為0。
( 3 )如果想使一個數組中全部元素值為0,可以寫成int a [ 10 ] = ( 0,0,0,0,0,0,0,0,0,0 );或int a [ 10 ] = ( 0 );
( 4 )在對全部數組元素賦初值時,由于數據的個數已經確定,因此可以不指定數組長度。例如:
int a [ 5 ] = ( 1,2 , 3 , 4,5 );
可以寫成
int a []= ( 1,2,3,4,5 );
在第2種寫法中,花括號中有5個數,雖然沒有在方括號中指定數組的長度,但是系統會根據花括號中數據的個數確定a數組有5個元素。但是,如果數組長度與提供初值的個數不相同,則方括號中的數組長度不能省略。例如,想定義數組長度為10,就不能省略數組長度的定義,而必須寫成
int a [ 10 ] = ( 1,2,3,4,5 );
只初始化前5個元素,后5個元素為0。
說明:
如果在定義數值型數組時,指定了數組的長度并對之初始化,凡未被“初始化列表”指定初始化的數組元素,系統會自動把它們初始化為0(如果是字符型數組,則初始化為' \0 ',如果是指針型數組,則初始化為NULL,即空指針)。