所謂陣列,就是相同資料型別的元素按一定順序排列的集合,就是把有限個型別相同的變數用乙個名字命名,然後用編號區分他們的變數的集合,這個名字稱為陣列名,編號稱為下標。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。在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...