一把梭系列 ~ C語言範例 (0010) [陣列]
一把梭系列 ~ 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 <stdio.h> #include <stdlib.h> #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.固定式陣列宣告大小不可使用常數變量,只能用字面常量
One thought on “一把梭系列 ~ C語言範例 (0010) [陣列]”
YOUTUBE URL: https://youtu.be/FQpGduSSwK8