Re: [问题] 对阵列名称取址

楼主: Hazukashiine (私は幸せです)   2015-05-13 21:44:01
※ 引述《lalaboom (lalaboom)》之铭言:
: 之前我的认知阵列名称是一个常数指标,非指标常数喔,
: 1. 请问这个叙述对吗?
: 现在有阵列 int b[2];
: int a[2][3];
: 2. 请问为什么 b 跟 &b 两个address会一样呢?
: 我可以理解 a, a[0], &a[0][0] 这3个一样,
: 但是type不同,还是说这个认知也是错的XD
: 3. 阵列在内存里面除了宣告出来的连续空间,
: 阵列名称是否会有另外像宣告指标一样有一个变量空间吗?
: 关于2之前好像有看到说&b = b 是定义好的 (compiler ? )
: 关于以上问题可能叙述的不是很好,
: 有需要我再补充,
: 恳请各位解惑 ~ 3Q
先不要管 l-value 跟 r-value 的问题,
这些真的都不重要,重要的是生成后的机械码。
不过本人从来没去认真想过 &b 真正存在的价值,
是为了使程式更加安全吗?像是:
宣告:char b[16];
void func(char (*arr)[16]);
呼叫:func(&b);
强制指定输入的阵列长度?
不然到底什么时候会用到啦~?╮( ̄▽ ̄")╭
作者: wenyonba (射后不理很XX啊!!!!)   2015-05-13 22:00:00
我之前的推文就是跟这篇原Po一样的想法,我就是不知道&b到底有啥用??XD
作者: Feis (永远睡不着 @@)   2015-05-13 22:35:00
硬要这么说的话, C 里面没有的东西可多了..."没用" 的东西...让阵列能取址是必要的存在. 因为你有多维阵列. 之前推文有更广泛的说是为了让 aggregate type 更有用. 细节有空再写
作者: wenyonba (射后不理很XX啊!!!!)   2015-05-13 22:55:00
嗯嗯,其实我本身开发很少用C/C++啦,是有学过,所以也是好奇,所以才会这样问XD
作者: CaptainH (Cannon)   2015-05-13 22:57:00
array of fixed-dimension vectors...或 array of pipe fd pairs,很少见吗往前翻发现lvalue rvalue是你提的耶
作者: yvb   2015-05-14 00:45:00
#define p(n) printf(#n"=%p, size=%d\n",(n),sizeof(*(n)))char a[32]; 用 p(n) 看 a &a &a[0] a+1 &a+1 &a[0]+1 &a[1]&a 有什么用? 我想是语意问题吧. 请认明 a 是 &a[0] 的简化.所以如果 func() 是想传整个 array, 写 func(&a ...) 较好,
作者: suhorng ( )   2015-05-14 01:04:00
咦 &a 是 &a[0] 的简化@@?
作者: yvb   2015-05-14 01:07:00
但若只是传入第一个的指标, 那就 func(&a[0]) 或 func(a) 吧当然, 传入第n个的指标就是 func(&a[n]) 或 func(a+n)suhorng: a 不是 &a. 我指的是位址计算的意义上.不然 sizeof(a) 当然不等于 sizeof(&a[0]) 啊.
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-05-14 10:13:00
可能只是表示“到此为止” 否则迟早会有人问&&a或&&&a是什么 烦都烦死了 规定&a=a便不会有这种“天外有天”的问题 天外还是天 再来没有了
作者: TobyH4cker (Toby (我要当好人))   2015-05-14 12:34:00
有点烦,会用就好
作者: uranusjr (←這人是超級笨蛋)   2015-05-14 12:39:00
推“天外还是天” XD
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-05-14 22:03:00
Asimov说他碰过个教派笃信天圆地方那套 扁平的地面底下是只大乌龟 Asimov就故意问对方乌龟底下是什么 对方立刻回答是另一只龟 龟下还有龟 龟龟相连想想看 每次讲到指标都落入标标相连 岂不烦死人

Links booklink

Contact Us: admin [ a t ] ucptt.com