參考資料
今天搜尋看見milo yip的知乎回答,講解c語言幾種二維陣列的建立方法及優劣。這裡總結分享一下。
如果二維陣列長度一定,最簡單的方法也最有效
const size_t m =
10, n =20;
// size_t 一般為 unsigned long long
// const 宣告常量避免 magic number
// const 宣告常量略優於 #define
int a[m]
[n];
如果需要矩形陣列的話,最佳方法是乙個指標加上開闢一整塊空間,略不方便的是下標需要自行計算。
但如果使用二級指標,會多消耗儲存二級指標的空間,以及每次訪問元素時,從指標所存的位址跳轉到對應記憶體的時間。
const size_t m =
10, n =20;
int* a =
(int*)
malloc
(m * n *
sizeof
(int))
;int i, j;
// 舊版本編譯器不支援for迴圈內宣告變數
for(i =
0; i < m;
++i)
// ++i 略優於 i++
for(j =
0; j < n;
++j)
a[i * n + j]
=/* ... */
;/* ... */
free
(a);
// 使用後釋放指標好習慣
如果矩形陣列浪費空間,只需要鋸齒形陣列(jagged array)的話,這時才需要二級指標。
const size_t m =
10, n =20;
int*
* a =
(int**
)malloc
(m *
sizeof
(int*)
);int i;
for(i =
0; i < m;
++i)
a[i]=(
int)
malloc
(n *
sizeof
(int))
;/* ... */
for(i =
0; i < m;
++i)
free
(a[i]);
free
(a);
使用其他資料結構,如一維陣列加鍊表等。
建立不定長陣列的方法:
一級指標+開闢一整塊空間
優點:空間、時間開銷低
缺點:下標需要自行計算
使用二級指標
優點:可以直接訪問下標
缺點:多消耗空間、時間
其他更合適的資料結構
milo yip知乎回答
高人指點
new動態建立二維陣列的方法
1.a ga n new a m n delete ga 缺點 n 必須是已知 優點 呼叫直觀,連續儲存,程式簡潔 經過測試,析構函式能正確呼叫 2.a ga new a m for int i 0 i m i ga i new a n for int i 0 i m i delete ga i d...
建立二維陣列的方法(隨時更新
對於常規的方法 t n n 的方法我就不說了。首先介紹兩個動態的建立方法,然後介紹一下c 標準的中使用stl的容器vector建立二維陣列的方法。1.定義 const int row 3 int size 5 int pi row new int size row 操作方法 int k 0 cout...
建立二維陣列的方法(隨時更新)
對於常規的方法 t n n 的方法我就不說了。首先介紹兩個動態的建立方法,然後介紹一下c 標準的中使用stl的容器vector建立二維陣列的方法。1.定義 const int row 3 int size 5 int pi row new int size row 操作方法 int k 0 cout...