c印記 五 陣列

2021-07-11 09:22:46 字數 2679 閱讀 1988

所謂陣列,就是相同資料型別的元素按一定順序排列的集合,就是把有限個型別相同的變數用乙個名字命名,然後用編號區分他們的變數的集合,這個名字稱為陣列名,編號稱為下標。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。在c語言中陣列屬於構造資料型別。它的特點是:陣列內部的元素都是同一種資料型別,可以是int,char,指標以及其他構造資料型別。

定義格式:型別名 陣列名[陣列容量];

例如:

/** 乙個班有30個人,需要定義乙個整型陣列來存放他們的學號 */

int number[30]; /** 其中 int:資料型別, number: 陣列名,30: 陣列容量 */

a. 定義時初始化

格式:型別名 陣列名[陣列容量] = ;

解釋:其前面部分和上面的定義格式是一樣的,這裡就不再累述,只是需要注意一點,『陣列容量』在這裡是可選的,然後在』=』右邊的花括號裡面就是初始化陣列的具體內容。

例如:

/**和初始化格式描述的完全一樣的方式,其中int:型別,a:陣列名,3:陣列容量,:初始化元素 */

int a[3] = ;

int b[3] = ; /**將所有陣列元素初始化為 0 */

/** 省略陣列容量的定義和初始化方式,注意:這裡如果像陣列b一樣初始化,就表示陣列容量為 1 */

int c = ;

int a[3];

位址元素

0x800

a[0]

0x804

a[1]

0x808

a[2]

其布局是線性的,因為元素是int型別,所以每個元素暫用4個位元組。

這裡說的都是一維陣列的情況,而c語言中還有多維陣列,以二維陣列為例(更高維陣列就可以以此類推),其定義和初始化的格式為:

型別名 陣列名[行數][列數];

型別名 陣列名[行數][列數] = , ,…} 或者 ;

注意:這裡和一維陣列有定義和初始化很相似,但是在二維陣列定義並初始化時,行數可以省略,但列數卻不能省略。其實在c語言中的多維陣列在本質上仍然是一維陣列(都是線性的),比如這個二維陣列,就可以看做是由 『行數』個元素組成的一維陣列,而這個元素又是乙個有『列數』個元素的一維陣列,由於陣列的特點是,所有元素都要是同一種資料型別,所以這個『列數』必須要有,這樣才能保證所有元素都是一樣的,如果省略,那就會由內填充的資料來決定,而陣列在定義的時候,需要知道每個元素大小,以此來分配儲存空間,如果省略了『列數』,編譯器就不知道其大小,就無法進行儲存空間的分配。

例如:

/** 

* 固定行數的定義和初始化方式

* int: 型別名,

* a: 陣列名,

* 2: 行數

* 3: 列數

* ,}:初始化元素

* 花括號裡面, 1: a[0][0],第一行,第一列

* 3: a[0][2],第一行,第三列

* 4: a[1][0],第二行,第一列

*/int a[2][3] = , };

/** 同上,只是將所有元素都初始化為 0 */

int b[2][3] = ;

/** 省略『行數』的定義和初始化方式 */

int c[3] = , };

b. 訪問及遍歷

c語言中的陣列在底層其實都是使用指標實現的,而且c語言規定:陣列名是乙個指向陣列元素型別的指標,它是指向該陣列的第乙個(即下標值為零的第0號)元素的指標常量。所以c語言的陣列就有兩種訪問方式:

- 使用下標運算子 + 下標 進行訪問,形如:陣列名[下標]

- 使用取內容運算子 *,形如: *(陣列名 + 下標)

注意:c語言陣列的下標是從 0 開始的

例如:

int a[3] = ; /** 定義乙個擁有三個元素的素組 */

/** 訪問第二個元素 */

//使用下標運算子 + 下標的方式

int i = a[1]; //獲取第二個元素的值

a[1] = 5; //給第二個元素賦值

//使用取內容運算子 * 的方式

int j = *(a + 1); //獲取第二個元素的值

*(a + 1) = 5; //給第二個元素賦值

陣列的遍歷就比較簡單了:

void main()

; int i;

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)

}

void array_foreach_recursive(int a, int index)

else

}//在遍歷的時候直接呼叫上面的函式,

void main()

; array_foreach_recursive(a, sizeof(a)/sizeof(a[0]));

/*** 注意,這裡沒有在遍歷函式內部獲取陣列a的元素數量,是因為在c語言中,

* 陣列作為函式引數的時候,會自動退化為指標,也就是說,在

* array_foreach_recursive函式中使用sizeof(a)得到的不是陣列占用的位元組數,而是得到

* 指標占用的位元組數,在32bit的系統上是 4 位元組,在64bit的系統上是8位元組。

*/}

C 碎片五 陣列

構造型別資料是有基本型別資料按照一定規則組成的。陣列,結構體,共用體都屬於構造型別的資料。陣列是有序資料的集合,c語言陣列中的每乙個元素都屬於同乙個資料型別,用陣列名和下標來唯一確定陣列中的元素。使用場景 當我們需要儲存大量同型別資料的時候可以用陣列 一維陣列定義 具有相同資料型別變數的有序集合 空...

c 實驗五 陣列選擇

一 問題及 檔名稱 ex5 1.cpp 作 者 朱趙有 完成日期 2016 年 5 月 10 日 版 本 號 v1.0 對任務及求解方法的描述部分 首先要把十個數放在乙個陣列裡,在對這個陣列進行分析 輸入描述 輸入是個數 問題描述 從鍵盤中輸入10個數放在陣列a中,將該陣列中不重複的數放到陣列b中 ...

(五)C 語言之陣列

1.1 基本概念 1.1.1 概念 1 元素型別角度 陣列是相同型別的變數的有序集合 測試指標變數占有記憶體空間大小 2 記憶體角度 聯絡的一大片記憶體空間 1.1.2 陣列初始化 int main 其他初始化為0 int b int c 20 for i 0 i 10 i memset a,0 s...