C語言中的陣列

2021-09-12 03:56:00 字數 2312 閱讀 3102

把一組型別相同的資料的集合稱為陣列(array),它所包含的每乙個資料叫做陣列元素(element),所包含的資料的個數稱為陣列長度(length)。陣列中的每個元素都有乙個序號稱為下標(index),下標從0開始。

定義格式

datatype arrayname[length];
datatype 為資料型別,arrayname 為陣列名稱,length 為陣列長度。

陣列長度可以是整數或者常量表示式,也可以是變數(變長陣列)。變長陣列(vla)仍然是靜態陣列,一旦確定長度後就不能改變。在實際程式設計中,有時陣列的長度不能提前確定,如果這個變化範圍小,那麼使用數值常量定義乙個足夠大的陣列就可以,如果這個變化範圍大,就可能會浪費空間,這時就可以使用變長陣列。

訪問陣列元素的格式為

arrayname[index]
index 為陣列下標。注意 index 的值必須大於等於零,並且小於陣列長度,否則會發生陣列越界。

定義格式:

datatype arrayname[length1][length2];
datatype 為資料型別,arrayname 為陣列名,length1 為第一維下標的長度,length2 為第二維下標的長度。

二維陣列在概念上是二維的,但在記憶體中是連續存放的。

在c語言中,二維陣列是按行排列的。

二維陣列可以看作由多個長度相同的一維陣列構成的。且這些一維陣列不需另作說明即可直接拿來使用。

陣列元素的值由包圍,各個值之間以 , 分隔。

只能給元素逐個賦值,不能給陣列整體賦值。

如果對一維陣列全部元素賦值,那麼在定義陣列時可以不給出陣列長度。如果對二維陣列全部元素賦值,那麼第一維的長度可以不給出,但第二維陣列的長度一定不能省略。

可以先定義陣列再給陣列賦值,也可以在定義陣列的同時賦值。

二維陣列的初始化可以按行分段賦值,也可按行連續賦值。

按行分段賦值: int a[3][2]=, , };

按行連續賦值:int a[5][3]=;

可以只對部分元素賦值,未賦值的元素自動取「零」值:

對於short、int、long,就是整數 0;

對於char,就是字元 '\0';

對於float、double,就是小數 0.0。

可以通過下面的形式將陣列的所有元素初始化為 0:

int nums[10] = ;

char str[10] = ;

float scores[10] = ;

一般會使用迴圈結構將資料放入陣列中(也就是為陣列元素逐個賦值),然後再使用迴圈結構輸出(也就是依次讀取陣列元素的值),二維陣列使用巢狀迴圈讀寫資料。

scanf() 讀取資料時,a[i] 表示乙個具體的陣列元素,所以我們要在前邊加 &。

陣列在記憶體中占用一段連續的空間,陣列元素之間是相互挨著的,彼此之間沒有一點縫隙。連續的記憶體為指標操作(通過指標來訪問陣列元素)和記憶體處理(整塊記憶體的複製、寫入等)提供了便利,這使得陣列可以作為快取(臨時儲存資料的一塊記憶體)使用。

一般情況下,陣列名會轉換為陣列的位址,需要使用位址的地方,直接使用陣列名即可。

在c語言中,陣列一旦被定義後,占用的記憶體空間就是固定的,不能在任何位置插入元素和刪除元素,我們將這樣的陣列稱為靜態陣列(static array)。

c語言陣列不會自動擴容,當下標小於零或大於等於陣列長度時,就發生了越界(out of bounds),訪問到陣列以外的記憶體。如果下標小於零就會發生下限越界(off normal lower);如果下標大於等於陣列長度就會發生上限越界(off normal upper)。

c語言為了提高效率,並不會對越界行為進行檢查,即使越界了也能夠正常編譯,只有在執行期間才可能會發生問題。越界訪問的陣列元素可能是其他變數的值、附加資料、位址等等,沒有實際的含義。

當發生陣列越界時,如果我們對該記憶體有訪問許可權,程式將正常執行,但會出現不可控的結果;如果沒有訪問許可權,程式將會崩潰。

當賦予陣列的元素個數超過陣列長度時,就會發生溢位(overflow)。一般情況下陣列溢位不會有什麼問題,頂多是丟棄多餘的元素。但對於字元陣列,有時會產生不可控的情況,字串的長度大於陣列長度,陣列只能容納字串的前幾個字元,即使編譯器在最後新增了 '\0',它也儲存不到陣列裡面,所以 printf() 掃瞄陣列時不會遇到結束符 '\0',只能繼續向後掃瞄。而後面記憶體中的資料我們不知道是什麼,字元能否識別,何時遇到 '\0',這些都是不確定的。當字元無法識別時,就會出現亂碼,顯示奇怪的字元。

C語言中的陣列

c語言陣列 一 陣列的概念 用來儲存一組資料的構造資料型別 特點 只能存放一種型別的資料,如全部是int型或者全部是char型,陣列裡的資料成為元素。二 陣列的定義 格式 型別 陣列名 元素個數 舉例 儲存5個人的年齡 int agrs 5 在記憶體中開闢4x5 20個位元組的儲存空間 可以在定義陣...

C語言中的陣列

include stdio.h include string.h include stdlib.h int main 定義乙個可以存放十個int型資料的陣列 int parr null parr array array a printf d n array printf d n array 1 pr...

C語言中的陣列

一維陣列 1 陣列名 宣告 int a int b 10 a b 10 為陣列,它是一些值的集合。下標和陣列名一起使用,用於標識該集合中的某個特定的值。對於b來說,只有在兩種情況下,陣列名僅代表整個陣列,a 陣列名作為sizeof操作符的運算元 b 陣列名作為 的運算元 除此之外,陣列名代表陣列首元...