看板 C_and_CPP 關於我們 聯絡資訊
E大已經把正常的答案填完了. 我從我理解的標準角度來看這個題目: 指標對整數的算術運算有兩個條件: 條件1. 指向的東西是某陣列的元素 條件2. 移動後的位置指向同一個陣列內的元素或者指向陣列後一個元素 備註: 雖然可以指向陣列後一個元素, 但對該指標取值是未定義行為 此外計算指標指向的位址需要很多假設. 這裡假設比較常見的記憶體模型並標注 [指標型態] 畢竟我們真的不需要知道指標裡面的位址是怎麼存的. ※ 引述《leo19866 (ice)》之銘言: : 1.pa[3] pa[3] 相等於 *(pa+3) pa 指向 a[1], 則 pa+3 指向 a[4] 雖然這陣列沒有 a[4] , 但是指向 a[4] 是合法的 (條件2) 不過 *(pa+3) 是 a[4] 本身, 但 a[4] 並不存在. 所以 *(pa+3) 是 "未定義行為" (備註) : 2.pa+2 pa+2 指向 a[3], 其值為 a[3] 的位址: 160 + 2 * sizeof(double) [指標型態] : 3.pa+i i == 4, 所以 pa+i 為 pa+4 pa 指向 a[1], pa+4 應該要指向 a[5] 但是這個指標算術運算結果超過陣列大小後一格. 是 "未定義行為" (條件2) : 4.ppa+i ppa 指向的是 pa 而不是一個陣列的某元素. 對其作指標算術運算是 "未定義行為" (條件1) : 5.*pa+i pa 指向 a[1], 則 *pa 為 a[1], 即 20.0 *pa+i == a[1]+4 == 20.0 + 4 == 24.0 : 6.*(pa+2) pa 指向 a[1], pa+2 指向 a[3], *(pa+2) 為 a[3], 即 40.0 : 7.*ppa ppa 指向 pa, *ppa 為 pa, 即 a[1] 的位址: 160 [指標型態] : 8.**ppa+1 ppa 指向 pa, *ppa 為 pa pa 指向 a[1], *pa 為 a[1] **ppa+1 == *pa+1 == a[1]+1 == 20.0+1 == 21.0 : 9.*ppa+1 ppa 指向 pa, *ppa 為 pa pa 指向 a[1], pa+1 指向 a[2] *ppa+1 == pa+1 == a[2] 的位址: 160 + sizeof(double) [指標型態] : 10.*(*ppa+1) 同上, *ppa+1 指向 a[2] 所以 *(*ppa+1) 為 a[2] 即 30.0 : 如果能解釋一下更好 : 在此先謝過了 我也不確定我的理解是否正確. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.148 ※ 編輯: Feis 來自: 140.112.29.148 (11/25 17:10)