Re: [問題]陣列本身加減問題

作者: cutekid (可愛小孩子)   2018-11-16 02:27:45
宣告 int a[10][20][30][40]
以下假設:
1. a 起始位址為 0
2. int 佔一個 Byte
開始計算:
a[5][5] = 5 * 20 * 30 * 40 + 5 * 30 * 40 = 126000
a[0][0] = 0
a[5][5] - a[0][0] = (126000 - 0)/40(註) = 3150
註: a[5][5],a[0][0] 型態是 int(*)[40],位移量 = 40 個 int
&a[5][5] = a[5][5] = 126000
&a[0][0] = a[0][0] = 0
&a[5][5] - &a[0][0] = (126000 - 0)/(30 * 40) = 105
註: &a[5][5],&a[0][0] 型態是 int(*)[30][40],位移量 = 30 * 40 個 int
a[5] = 5 * 20 * 30 * 40 = 120000
a[0] = 0
a[5] - a[0] = (120000 - 0)/(30 * 40) = 100
註: a[5],a[0] 型態是 int(*)[30][40],位移量 = 30 * 40 個 int
結論: 1. 先算出各別記憶體位址得到位址差
2. 位址差 / 型態位移量 = 總位移量
※ 引述《glass0520 (快樂就好)》之銘言:
: 此程式碼來源是106地特4等程式設計考題
: 題目問輸出為何?
:

: 這是我直接複製貼上直接跑出來的答案
:

: 我直接把每個輸出出來
: 本來想說是要問元素個數,但四維陣列我難解析,數字也頗大
: 所以我用二維試試...如下
:

: 結果a[5][5] a[0][0] 跑出來的不是記憶體位址!
: 下面兩個算式,我想大概是元素個數...
: &a[5][5]-&a[0][0]大概是 d8c-cb0 -> dc ->16*d+c -> 220/4 -> 55
: a[5]-a[0]也符合 d78-cb0 -> c8 -> 16*c+8 -> 200/4 ->50
: 接下來我又試試一維陣列直接a[0]~a[5]輸出樣子...
:

: 我的問題是想請問,陣列沒設值情況下,直接給指定索引,到底是什麼意思?
: 原題目是要問元素個數?然後只適用在四維陣列嗎?
: 原題目輸出是怎麼出來的?

Links booklink

Contact Us: admin [ a t ] ucptt.com