推 linbn:原來如此...那麼,計算索引值是靠編譯器而非OS囉? 04/05 21:28
※ 引述《linbn (l3n)》之銘言:
: 宣告一個3x3的整數陣列,並且用程式走訪後...
: (code: http://endtable.net/paste/279d56d2.html )
: 結果:
: &a[0][0]=22ff30 , a[0][0]=1
: &a[0][1]=22ff34 , a[0][1]=2
: &a[0][2]=22ff38 , a[0][2]=3
: &a[0][3]=22ff3c , a[0][3]=4 ╮為什麼&[0][3]=&[1][0]?
: &a[1][0]=22ff3c , a[1][0]=4 ╯[0][3]已經超過陣列大小了吧
: &a[1][1]=22ff40 , a[1][1]=5
: &a[1][2]=22ff44 , a[1][2]=6
: &a[1][3]=22ff48 , a[1][3]=7 ╮這邊也是,&[1][3]=&[2][0]
: &a[2][0]=22ff48 , a[2][0]=7 ╯
: 是否是因為...
: n x m陣列在記憶體中還是連續的,
: 所以[0][3] 其實是走到 [1][0] ?
: &a[2][1]=22ff4c , a[2][1]=8
: &a[2][2]=22ff50 , a[2][2]=9
: &a[2][3]=22ff54 , a[2][3]=4006848 ╮
: &a[3][0]=22ff54 , a[3][0]=4006848 │
: &a[3][1]=22ff58 , a[3][1]=4006824 │ 為什麼會跑出這些奇怪的數字?
: &a[3][2]=22ff5c , a[3][2]=8 ╯
: &a[3][3]=22ff60 , a[3][3]=2009116333 =>應該是 '\0' 不是嗎 ?
基本上如果是直接配置的話
二維陣列記憶體是連續的沒錯
因此第一個問題是肯定的
第二個問題, 得要仔細看一下這個:
a+0 a+1 a+2 a+3
─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─
│1│2│3│4│5│6│7│8│9│X│X│X│
─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─
X表示不知道是啥東西
所以a[3]才會去讀到那麼怪的東西
---
其實簡單說來,就是:
C語言的陣列若宣告某維度大小為n 則該維度的註標是由0~n-1的
--
"LPH" is for "Let Program Heal us"....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.84