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