C語言的一維陣列和字元陣列

2021-08-10 22:46:13 字數 2037 閱讀 4986

上文介紹的都是基本資料型別(整形、浮點型、字元型等),現在開始接觸另外3種復合資料結構:陣列、結構體、共用體。

陣列(array)是若干同類變數的聚合,允許通過統一的名字引用其中的變數。陣列的特定元素通過下標(index)訪問。在c語言裡,陣列都由連續記憶體區構成,最低位址對應首元素,最高位址對應末元素。陣列可以是一維的,也可以是多維的。c語言中,最常用的陣列是串(string),就是以空字元結尾的一維陣列。陣列和指標的關係特別緊密,討論其中乙個常常涉及其中另乙個。

陣列和變數一樣,也是先定義,後使用。陣列定義的形式是型別名、識別符號、維數。比如:int a[10],這就定義了乙個含有10個整型元素的陣列。

可以在定義陣列的同時進行初始化,這時就無需指定元素個數。如:

int a=;
無尺寸陣列初始化假設我們希望通過陣列初始化建立錯誤資訊表,如下所示:

char e1[12]="read error\n";

char e1[13]="write error\n";

char e1[18]="cannot open file\n";

顯然,當使用手工計算字元個數來決定正確的陣列的大小時,工作冗長且容易出錯。使用無尺寸陣列(unsized array)時,c自動計算陣列的大小。在初始化語句中遇到無尺寸陣列後,c編譯程式自動生成恰好存放常量串的陣列。由此,以上初始化**變為:

char e1[ ] = "read error\n";

char e2[ ] = "write error\n";

char e3[ ] = "cannot open file\n";

除使程式變得簡潔外,無尺寸陣列初始化還能確保改變常量串時陣列尺寸的恆正確。

無尺寸陣列初始化也適用於多維陣列。此時,除第一維可以不定義尺寸外,其他維的大小必須準確說明。這樣,程式設計師可以建立變長表,由編譯程式自動分配足夠記憶體。例如,初始化無尺寸陣列sqrt的陣列宣告如下所示:

int sqrs[2] = ;;;

;;;;

;};

相對於定尺寸陣列宣告,無尺寸陣列的優點是,可以隨意加長或縮短表的長度,而不必改變陣列的尺寸。

c語言規定,只能引用陣列的乙個元素,而不能一次引用整個陣列。陣列引用的方式:識別符號[下標]

儲存陣列所需記憶體量直接與基型別和陣列大小有關。對一維陣列而言,以位元組為單位的總記憶體量可由下式計算得到:

總位元組數 = sizeof(基型別)× 陣列長度

c語言不檢查陣列邊界,程式可以在陣列兩邊越界,寫入其他變數,甚至寫入程式**段。作為程式設計師,必要時應自己加入邊界檢查。本質上,一維陣列就是在連續記憶體中按下標順序儲存的同類資訊組成的表。下圖是陣列a開始於記憶體位置1000的記憶體映像。a的宣告是:

字元陣列:顧名思義,就是存放字元的陣列。

char str[20]=;

for(i=0;i<20;i++)

printf("%c",str[i]); //遍歷輸出字元陣列的值

c語言中,字串也是用字元陣列來儲存的。需要注意的是字元陣列和字串的長度,用『\0』代表乙個字串的結束,所以系統會自動為字串增加乙個『\0』作為結束符。

//以下兩種方式是等價的

char str[9] = "i like c";

char str[9] = ;

因為c的所有串都以null符結尾,所以定義字串陣列時必須留出乙個存放null的位置。「i like c」只有8個位元組,但str定義成9位元組,留出乙個放null符的位置。使用串常量初始化時,編譯程式自動補結尾null符。

C語言程式設計 一維陣列 字元陣列

一維陣列 最簡單的陣列 陣列 相同資料型別的成員組成的一組資料。陣列是一種構造型別,相同資料型別組成的新資料型別。陣列的每個成員稱為乙個陣列元素 一維陣列的定義 型別說明符 陣列名 常量表示式 陣列元素額訪問 陣列名 下標 陣列下標從0開始,到陣列總個數 1 注意事項 系統不會檢測陣列元素的下標是否...

C語言 一維陣列和二維陣列

1.解析一維陣列的建立和初始化 建立 建立一維陣列時,需有陣列型別,陣列名,以及陣列的大小 可有可無,若沒有大小則在初始化時,根據初始化的內容自動分配 初始化 陣列在使用前必須明確陣列的元素已經被賦予確定的值。初始化可以有以下兩種方法 1 在陣列定義時就賦給陣列確定的值 2 先給陣列乙個宣告,然後用...

c語言 一維字元型陣列

什麼是一維字元型陣列 char a 5 這個陣列中含有5各元素,每個元素都是乙個字元型變數 如何定義一字元型維陣列 格式 char 陣列名 長度 ex char a 6 定義了乙個含有6個字元型變數的陣列a。如何來給一維字元型陣列賦初值?1 一維字元型陣列從 整體上看 就是乙個字串,但是其中的每乙個...