一把梭系列 ~ C語言範例 (0010) [陣列]

一把梭系列 ~ 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) [陣列]

jash.liao@qq.com 發表迴響 取消回覆

你的電子郵件位址並不會被公開。 必要欄位標記為 *