C/C++

C 語言學習筆記 (八):陣列宣告

學習書籍:C 語言學習手冊 第四版。作者: 洪維恩
這是一篇記錄自己學習 C 語言的過程,算是給自己看的筆記,所以這裡面的內容,是我整理書中我認為重要的部分,然後用自己的方式重新寫一遍,如果有圖,我會理解完,再自己畫出來,內容肯定會和課本上有出入,若有錯誤,或是理解錯的地方,希望能讓我知道。


何謂陣列

陣列 (array) 是由一群"相同資料型態"的變數所組成的一種資料結構。陣列和變數一樣都需要經過宣告才能使用,而陣列中的元素 (element) 都是以索引值 (index) 來表示存放位置。依照陣列複雜程度,可以區分成一維陣列、二維陣列,甚至更多維度的多維陣列。

一維陣列

一維陣列宣告方式:

資料型態 陣列名稱[個數];

陣列宣告之後,編譯器會在記憶體中分配一個連續區塊給陣列使用,而這些區塊就是用來存放陣列的元素。

int score[5];
float averge[6];
char name[4];

陣列是通過索引值來存取元素,索引值是從零開始依序編號下去,例如score[0]、score[1]、score[2] ...

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int score[4];

    score[0] = 65;
    score[1] = 95;
    score[2] = 45;
    score[3] = 85;

    for(i=0; i<4; i++) {
        printf("score[%d]=%d\n",i,score[i]);
    }

    system("pause");
    return 0;
}

如果沒有設定數值給陣列的元素時,所取得的數值為記憶體殘值。

陣列不會自動偵測索引邊界,因此超出陣列的索引值取的數值也是記憶體殘值。

一維陣列的初值設定:

資料型態 陣列名稱[個數n] = {初值0, 初值1, ... ,初值n};

查詢陣列所佔的記憶體大小 sizeof

sizeof(陣列名稱)
double data[4];  // 宣告陣列

// 陣列的記憶體大小
printf( sizeof(data) );

// 陣列元素的記憶體大小
printf( sizeof(data[0]) );

// 元素的個數
printf( sizeof(data)/sizeof(double) );

二維陣列與多維陣列

二維陣列宣告方式:

資料型態 陣列名稱[列個數][行個數];

二維陣列初值設定:

資料型態 陣列名稱[列個數n][行個數m] = {
    {第0列},  // 第0列包含:{第0行,第1行, ... ,第m行}
    {第1列},  // 第1列包含:{第0行,第1行, ... ,第m行}
    {第2列},  // 第2列包含:{第0行,第1行, ... ,第m行}
    ... ,
    {第n列},  // 第n列包含:{第0行,第1行, ... ,第m行}
};
int arr2d[3][4] = {
    {0,1,2,3},
    {0,1,2,3},
    {0,1,2,3},
};

二維陣列的存取方式:

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int arr2d[3][4] = {
        {0,1,2,3},
        {0,1,2,3},
        {0,1,2,3},
    };

    for(n=0; n<3; n++) {
        for(m=0; m<4; m++) {
            printf("arr2d[%d][%d]=%d\n",n,m,arr2d[n][m]);
        }
    }

    system("pause");
    return 0;
}

多維陣列宣告方式:

資料型態 陣列名稱[第1維度個數][第2維度個數][第3維度個數]...[第n維度];

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *