C語(yǔ)言 一維數(shù)組的定義
1.一維數(shù)組的定義方式
對(duì)一維數(shù)組進(jìn)行定義的方式為:
類型標(biāo)識(shí)符 數(shù)組名[元素個(gè)數(shù)];
例如:
int ar r [7];
定義了一個(gè)名為arr的整型數(shù)組,數(shù)組中有7個(gè)元素。
前面提到過(guò)數(shù)組元素是有序的,這個(gè)有序性并不是說(shuō)數(shù)組中各個(gè)元素的值的大小有序,而是同一個(gè) 數(shù)組的數(shù)組元素在內(nèi)存中的存儲(chǔ)空間是連續(xù)的,按照數(shù)組元素的下標(biāo)從小到大依次存放。其中,數(shù)組名代表該數(shù)組的首地址,例如上例中,arr是數(shù)組名,代表數(shù)組在內(nèi)存中的首地址,因?yàn)閿?shù)組元素依次存放,所以如果知道首地址,就可以推斷出數(shù)組中每個(gè)元素的地址。
數(shù)組元素地址=數(shù)組首地址+元素下標(biāo)+siziof (數(shù)組類型)
假設(shè):每個(gè)整型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié),數(shù)組arr的起始地址(即數(shù)組中的第一個(gè)元素的地址)為2000,下圖所示是數(shù)組arr在內(nèi)存中的存儲(chǔ)示意圖。那么,從公式中可以推斷出:
數(shù)組元素arr[3]的地址為:2000+3*4=2012。
2000 | 78 | drr[0] |
2004 | 72 | arr[1] |
2008 | 91 | arr[2] |
2012 | 87 | arr[3] |
2016 | 90 | arr[4] |
2020 | 57 | <arr[5] |
2024 | 69 | drr[6] |
2.說(shuō)明
(1)類型標(biāo)識(shí)符說(shuō)明數(shù)組元素的類型??梢允莍nt、long、char、float、double等。
(2)數(shù)組名的命名規(guī)則與變量的命名規(guī)則相同,遵循標(biāo)識(shí)符的命名規(guī)則。
(3)數(shù)組元素的下標(biāo)從0開(kāi)始,所以arr[0]為第一個(gè)元素,arr[6]為該數(shù)組的最后一個(gè)元素,不存在數(shù)組元素arr[7]。由于C語(yǔ)言對(duì)于下標(biāo)越界錯(cuò)誤不做判讀,不報(bào)錯(cuò),所以如果程序設(shè)計(jì)中,不小心出現(xiàn)了arr[7], C編譯系統(tǒng)也不會(huì)報(bào)錯(cuò)。如果輸出,會(huì)輸出一個(gè)不確定值,所以需要編程人員自己慎重控制。
(4)“元素個(gè)數(shù)”即數(shù)組長(zhǎng)度,只能是一個(gè)整型常量表達(dá)式??梢允欠?hào)常量。例如,以下數(shù)組的定義都是合法的:
int a [5];
定義了一個(gè)數(shù)組名為a的整型數(shù)組,其中含5個(gè)元素。
char ch [100]:
定義一個(gè)有100個(gè)元素的字符數(shù)組,數(shù)組名為ch。
#define N 5;
double b [N*2];
使用符號(hào)常量N定義了一個(gè)double型數(shù)組,里面含10個(gè)元素。
需要注意的是:C語(yǔ)言不允許使用變量定義長(zhǎng)度不定的動(dòng)態(tài)數(shù)組,所以“元素個(gè)數(shù)”中不能包括變量。例如,以下定義是錯(cuò)誤的:
int n ;
float arr2[n];
因?yàn)閏編譯系統(tǒng)需要根據(jù)定義數(shù)組中元素的個(gè)數(shù)和類型為數(shù)組分配相應(yīng)大小的內(nèi)存空間。如果使用變量定義數(shù)組,變量的值不確定,所以編譯系統(tǒng)無(wú)法確定數(shù)組的大小。即便把上述定義改為如下方式:
int n-10;
float arr2[n];
也是不對(duì)的,因?yàn)閚的值只有在程序運(yùn)行階段才能確定,而數(shù)組空間的分配則是在編譯階段完成的。
(5)定義數(shù)組時(shí),數(shù)組元素兩邊一定是方括號(hào),寫(xiě)成括號(hào)或花括號(hào)都是錯(cuò)誤的。例如:
int a(10);
, long x{5);
例:判斷下列數(shù)組的定義哪些是合法的,哪些是不合法的。
②int student [35];
②char name [20];
③float score [35];
④
#deflne student 35
float n, student[student];
④int person(1O);
⑤int n=10, a[n];
其中,①、②、③題中的數(shù)組定義都是合法的,而④、⑤、⑥的定義都是不合法的。④的不合法處是因?yàn)闃?biāo)識(shí)符“student”又當(dāng)常量名,又作為數(shù)組名出現(xiàn),這是不允許的。⑤的錯(cuò)誤之處在于數(shù)組元 素的兩邊一定要是方括號(hào)。⑥的錯(cuò)誤是試圖使用變量作為數(shù)組元素個(gè)數(shù)出現(xiàn)。
(6)和變量一樣,可以在一個(gè)類型聲明中聲明多個(gè)數(shù)組。例如:
double salary [8] ,tax[8];
也可以變量和數(shù)組進(jìn)行混合聲明。例如:
int iuscore[30];
點(diǎn)擊加載更多評(píng)論>>