數組
數組就是在內存空間中,開辟一個大的空間,然后再將這個大的空間均的分為若干份的小空間,每個小空間用來保存一個數據.
1). 數組的專業術語:
長度:指的能存放數據的個數
下標/索引:每一個數據所在小空間的編號
元素:每個小空間里面實際存放的數據
2). 數組的聲明和賦值
A.聲明
類型 數組名[要保存的數據的個數];
例: int scores [5]; //代表一個保存了五個int類型數據的數組,數組名為scores;
char chs [5]; //代表一個保存了五個char類型數據的數組,數組名為chs;
float fs [5]; //代表一個保存了五個float類型數據的數組,數組名為fs;
B.賦值
a.對聲明完成的數組進行逐一賦值
數組名 [下標] = 數據;
例:int scores[5];
scores[0] = 100; //為下標為0的元素賦值為100
scores[1] = 1;
…………
scores[4] = 100;
注:數組的下標總是從0開始,下標最大的數為數組的長度減1;
b.在數組聲明的時候就初始化
語法
1.
類型 數組名[長度] = {數據1,數據2,數據3,…..數據n};
注:長度有多少個,數據就寫多少個
例: int scores [5] = {90,93,23,54,65}; // 數據會從0開始依次賦值
2.
類型 數組名[] = {數據1,數據2,數據3,…..數據n};
注:編譯器會自動根據右邊花括號中得數據個數確定你數組的長度
例: int scores [] = {90,93,23,54,65}; // 長度為5
char chs [] = {'a','b','c'}; //長度為3
3.
類型 數組名[5] = {數據1,數據2};//數據不足5個
例: int scores [] = {90,93}; // 這樣賦值,只有下標0和1有值,分別是90和93,其他元素沒有值,系統會為這些沒有沒有值的元素初始化為0
注:部分初始化的話,其他沒有賦值的元素會被初始化為0
4.
類型 數組名[5] = { [4] = 數據,[3] = 數據,[2] = 數據,[1] = 數據,[5] = 數據}; //這種是人為的指定給下標為幾的元素賦值
例: int scores [5] = {[4] = 45,[3] = 67,[2] = 89,[1] = 27,[5] = 86};
注:很少這樣用
3). 數組的取值
語法: 數組名 [下標];
例: nums [0]; //取的下標為0的元素 也是就是數組種第一個數據
nums [3]; //取的下標為3的元素 也就是數組中第四個數據
4). 遍歷數組
就是代表循環這個數組依次的訪問每個元素
例:
int scores [5] = {89,76,88,50,99}
for(int i = 0;i < 5; i++){
printf(“%d\n”,scores[i]);// i的值依次是0,1,2,3,4,剛好對應上面訪問的下標
}
5). 數組的越界
越界:就是訪問了不屬於自己的空間,可能會造成無法預知的后果,要么就是破壞了別的數據,要么就是運行報錯
例: int scores [5] = {89,76,88,50,99}
scores[10] = 200; //越界了
6). 數組長度的公式
數組占用的總字節數 / 每一個元素占用的字節數 = 小空間的個數(數組的個數)
sizeof(數組名) / sizeof(數組類型)
注:sizeof不是函數,是運算符
7). 數組作為函數的參數 **********
聲明數組的時候是必須寫長度的,但是把數組作為函數的參數時,定義形參的時候,可以不寫長度,代表所有長度同類型的數組都可以傳過去.
注:在C語言中,除了數組以外,都是值傳遞,而數組的傳遞是引用的傳遞,所以形參的值發生變化,實參的值也會發生改變;但是數組的元素就是一個普通的變量,所以如果是數組的元素作為函數的參數時,同樣是值傳遞;