作者LPH66 (ゆびさきミルクティー)
看板CSSE
标题Re: 二维阵列元素位址的问题
时间Wed Apr 5 21:22:10 2006
※ 引述《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
1F:推 linbn:原来如此...那麽,计算索引值是靠编译器而非OS罗? 04/05 21:28