Zi 字媒體
2017-07-25T20:27:27+00:00
一把梭系列 ~ C語言範例 (0010) [陣列]
資料來源: https://openhome.cc/Gossip/CGossip/OneDimArray.html
★前言:
★主題:
現在假設我們要整理一個全班某科小考成績,你希望寫個小程式,全班共有 40 名學生,所以必須有 40 個變數來儲存學生的成績,現在問題來了,根據之前學過的,難道要宣告 40 個名稱不同的變數來儲存學生的成績資料嗎?
當然不會這麼麻煩的,C 提供陣列(Array),可以宣告一個以索引(index)作為識別的資料結構,宣告陣列的方式如下:
//資料型態△陣列變數名稱[大小];
//其中△代表英文空格
資料型態可以是 int、float、char… 等,以下是幾個宣告的範例:
int number[10]; // 宣告 10 個元素的整數陣列
double score[10]; // 宣告 10 個元素的浮點數陣列
char name[10]; // 宣告 10 個元素的字元陣列
上述是『靜態陣列』的宣告方式,必須先決定了陣列長度。
在 C99 前不可以使用變數來事後決定陣列的長度,如果要動態宣告陣列長度就要使用動態記憶體宣告來解決陣列大小,這可以參考〈malloc、free、calloc 與 realloc〉等函數。
宣告陣列之後,陣列所配置到的記憶體空間中所儲存的數值是未知的,如果在宣告變數時尚未決定陣列中的值,可以這麼宣告陣列賦予基本初始值:
int number[10] = {0};
double score[10] = {0.0};
char name[10] = {'\0'};
上面的幾個宣告,整數陣列中的元素都會被初始為 0,浮點數陣列則會被初始為 0.0,字元陣列則會被初始為空字元(’\0’),在宣告陣列時初始陣列元素,可以避免程式存取到非預期的數值。
也可以在宣告陣列時初始所有的陣列值,例如:
int number[5] = {0, 1, 2, 3, 4};
double score[5] = {87.0, 78.0, 99.5, 69.5, 82.5};
char ascii[5] = {'A', 'B', 'C', 'D', 'E'};
當要存取陣列中的值時,可以使用下標(Subscript)運算子 [] 加上索引(Index),指定要存取的陣列元素,C 的索引值一律由 0 開始,而不是由 1 開始
★code
#include
#include
#define LENGTH 10 //const int LENGTH = 10;//
int main(void)
{
int arr[LENGTH] = {0};//宣告陣列並初始化
int i;
int length = sizeof(arr) / sizeof(arr[0]);//計算陣列個數=陣列整體大小/單一陣列元素大小
for(i = 0; i < LENGTH; i++)//印出初始化後的陣列值
{
printf("%.2d ", arr[i]);
}
putchar('\n');
for(i = 0; i < LENGTH; i++)//使用迴圈依序設定陣列值
{
arr[i] = (i+1);
}
for(i = 0; i < length; i++) {//印出設定後的陣列值
printf("%.2d ", arr[i]);
}
putchar('\n');
return 0;
}
★結果:
★延伸說明/重點回顧:
01.目前幾乎所有主流程式語言中陣列的索引(Index)都是從0開始,由於這和人類一般的數學有所不同,因此對初學者要特別注意
02.字元陣列初始化使用『’\0’』,其中\0代表是ASCII Code的第一個值=數字0
03.固定式陣列宣告大小不可使用常數變量,只能用字面常量
寫了
5860316篇文章,獲得
23313次喜歡