C/C++ 上陣列有兩個主要的特性:

1、配置存放陣列元素的記憶體(需要知道陣列『元素個數』還有『元素型態』才能實現)

2、提供 [] 運算子存取元素(知道陣列『第一個元素的位址』還有『元素型態』才能實現)

所以想要實作出陣列,需要知道『元素個數』、『元素型態』跟『第一個元素的位址』。

 

一般陣列(int a[5]為例)

其中5是『元素個數』, int是『元素型態』,  a 可以轉型成 &a[0]表示『第一個元素的位址』。

動態一維陣列(int *a = new int[N]為例)

其中N是『元素個數』, int 是『元素型態』,  a 是『第一個元素的位址』。

 

動態二維陣列配置:

需要配置外圍陣列,以及內部陣列元素的記憶體空間,

int N = 5;

int M = 4;

int **b = new  int *[N];

b是一個有N個元素的陣列,每個元素型態是 int *,也要對每一個 b[i] 配置記憶體跟儲存第一個元素位址,

for (int i = 0; i < N; ++i) {

  b[i] = new int[M];   // b[i] 是一個有 M 個元素的陣列, 每個元素型態是 int}

}

動態二維陣列記憶體釋放:

同理在 delete 的時候也必須執行兩次 (順序要相反)

for (int i = 0; i < N; ++i) {

 delete [] b[i]

}

 delete [] b

 

為了b[i] 指向的記憶體空間連續而增加效率:

int **b  = new int*[N];

int *c   = new int[N*M];   // 一次配置好所有 b[i] 用的空間

for (int i = 0; i < N; ++i) {

  b[i] = c + i * M;

}

記憶體釋放的時候:

 delete [] c;

 delete [] b;

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 阿洲 的頭像
    阿洲

    阿洲程式天地

    阿洲 發表在 痞客邦 留言(0) 人氣()