Re: [問題]陣列本身加減問題
宣告 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等程式設計考題
: 題目問輸出為何?
: https://imgur.com/oJU522G.jpg
: 這是我直接複製貼上直接跑出來的答案
: https://imgur.com/XPwfbC7.jpg
: 我直接把每個輸出出來
: 本來想說是要問元素個數,但四維陣列我難解析,數字也頗大
: 所以我用二維試試...如下
: https://imgur.com/FfheL6a.jpg
: 結果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]輸出樣子...
: https://imgur.com/1217fOa.jpg
: 我的問題是想請問,陣列沒設值情況下,直接給指定索引,到底是什麼意思?
: 原題目是要問元素個數?然後只適用在四維陣列嗎?
: 原題目輸出是怎麼出來的?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.62.12
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1542306468.A.54B.html
※ 編輯: cutekid (61.223.62.12), 11/16/2018 02:41:04
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章