精華區beta CSSE 關於我們 聯絡資訊
※ 引述《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
linbn:原來如此...那麼,計算索引值是靠編譯器而非OS囉? 04/05 21:28