第二章 陣列 (ARRAYS)
一維陣列
(ONE-DIMENSIONAL ARRAY)
若C語言宣告: int a [5]; 整數佔 4 個位元組(byte),則陣列 a 共需 20 位元組。 假設陣列之名稱變數 a 記錄陣列的啟始位址1000,則 陣列在記憶體中的配置情形如下: 啟始 位址 1000 1004 1008 1012 1016隨機存取元素值
C 語言宣告陣列如下: int b[20]; 若陣列的起始位址為 1000,則 (1) 元素 b[10] 的起始位址為 1000 + 4 * 10 = 1040 (2) 元素 b[i] 的起始位址為 1000 + 4 * i 1000 1004 … … 1040 … ? … b[0] b[1] … b[9] b[10] … b[i] … b[19] 4 * 10 4 * i 起始位址範例
若陣列 c 有 n 個元素,索引從 0 開始,每個元
素佔 d 個位元組空間,且陣列的起始位址為
,
則 c[i]的起始位址為何?(i為整數,0<=i<n)
解:
c[i]起始位址為
+i*d
0 1 … … i … … n-1 i*d 起始位址為 起始位址為 +i*d 索引範例
若宣告為 int c[200]; 已知 c[100]的起始位址為(102A)16, 求 c[125]的起始位址? 解: 0 1 … 100 … 125 … n-1 4*25 起始位址 102A16 起始位址為 102A16+(4*25)10 索引 所以 c[125]的起始位址為 102A16+(4*25)10 = 108E16二維陣列
(TWO-DIMENSIONAL ARRAY)
C 語言是以列為主序 (row major) 的方式 循序存放二維陣列,例如: int a[3][4]; 行 列 0 1 2 3 0 a[0][0] a[0][1] a[0][2] a[0][3] 1 a[1][0] a[1][1] a[1][2] a[1][3]2 a[2][0] a[2][1] a[2][2] a[2][3] a[2][3] +48
+44 a[2][2] +40 a[2][1] +32 a[2][0] 列2 +28 a[1][3] +24 a[1][2] +20 a[1][1] +16 a[1][0] 列1 +12 a[0][3] +8 a[0][2] +4 a[0][1] a[0][0] 列0 起始位址