[问题] 阵列、指标与内存的概念疑问

楼主: i78524 (Shulei)   2014-11-26 01:22:04
一开始请大家看个code:
http://i.imgur.com/6RD8WK1.jpg?1
在这里,阵列可以用指标的方法来操作。
由&a得知,指标变量a的"内存位址"为:2686752 (十进制)
由 a得知,指标变量a指向的是:2686752 (十进制)
换句话说2686752至26867525这段内存位置里放的应该是数字:2686752
(我的观念:指标变量是个值,这个值放的是指向的位址)
图例:
┌这里放4byte数字2686752┐
|_____|_____|_____|_____|
↑ ↑ ↑ ↑
6752 6753 6754 6755
取值运算子*a告诉我:
(1). a里面放的数字是2686752
(2). 我去内存位址2686752的地方拿数字出来,拿出来的东西是11
(3). 因此,可推敲出"11"这个数值,确实是放在2686752至26867525这段内存区间
我的问题来了
但是2686752至26867525这段内存区间不是已经放了数字:2686752吗?
我不太能接受数字11也是放在2686752至26867525这段内存区间内啊...
11到底放在内存的哪里呢?
这是个新手问题,但我还是转不过来,请见谅。
还请各位多多指教与帮忙,真的十分感谢各位。
我是突然看了http://www.flag.com.tw/book/cento-5105.asp?bokno=FS712&id=275
才突然有a[0],&a[0]数值是一样的观念,真是惭愧
还请各位帮忙,感恩。
作者: PoorLoser (废文制造机)   2014-11-26 01:43:00
记得最近才有人问, &a 跟 a 是同一个内存 "位址"不然会陷入 位址的位址的位址的位址的... ...a[i] 取值 等效于 *(a+i)下面那个网页说得是二维阵列, 你好像搞错什么了...
作者: putumaxally (putumaxally)   2014-11-26 05:06:00
阵列可以用指标的方法来操作,不代表阵列等于指标你给的网站是二维阵列,你举的a是一维阵列,然后你说他是指标变量,你应该是看太多东西搞混了一维阵列的位址跟第一个值的位址是一样的,[]里面的数字代表位移量。二维阵列就是在一维阵列里面在放一个一维阵列,所以疴,上面这句我好像说错了...
作者: purpose (秀才遇到肥宅兵)   2014-11-26 07:32:00
你仔细看旗标那的第一行,有一个作者刻意设定出来的名词>> 阵列的名称是一个指向阵列位址的‘指标常数’>> ‘指标常数’的位址等于‘指标常数’的内容
作者: LPH66 (-6.2598534e+18f)   2014-11-26 13:51:00
他把 num / num[0] 画一个格子让你误会了实际上 1000 这值是绑在 num 这符号上的, 在做位移运算时(例如计算 num[1] 的位址等) 会把这个 1000 直接代入运算式也就是说 1000 这个值不是记在内存里而是直接代入运算在编译完的程式里已经没有"num"这个名字, 而是变成"位址在1000 那里的阵列",要说的话这才是1000这值"记录在"的地方
作者: dirkc (3781615)   2014-11-26 16:45:00
你认为的11是对的,但是你要说的是2686755而非26867525吧
作者: purpose (秀才遇到肥宅兵)   2014-11-26 19:56:00
编译器自己会有一块内存,里面记载 num 是二维阵列int [3][4] 起始位址是 1000,所以运算式中出现 num 时编译器从他自己那块内存去做查询,查到 1000 这个值编译器的那块内存,在程式编译完后就丢掉了,所以你写&num 下去编译器也不会鸟你,会硬回传 1000 这个值至于 num[1] 的等价运算式是 *(num + 1),根据指标运算的规则,就是要跳 sizeof(int) * 4,是从 num 推导得来。有兴趣的话,可以看看置底文,还有爬文找我写的混沌四神虽然我写得不太通顺,但可以提供一点额外资讯

Links booklink

Contact Us: admin [ a t ] ucptt.com