C_and_CPP 板


LINE

※ 引述《Nairoda (new)》之铭言: : 多谢 L 大的回答, : 我能了解 : a 它是个"在 0x22cd0c 的 int[2][3]" : a[0] 它是个"在 0x22cd0c 的 int[3]" : a[0][0] 它是个"在 0x22cd0c 的 int" : 而 : : *a 会是一个"在某处的 int[3]" 而 *(a[0]) 会是一个"在某处的 int" : : 而某处在哪就是你上面提到的"值"了 : 请问上一句的 "在某处" 感觉上是个变数 (因为 L 大下一段回覆 b 中的 "某处" 是变数 : 的意思)。 : 但这里的某处不是个变数对不对 (这是我的问题一) ? 因为在宣告 int a[2][3] 时, a : 的位置就与 a[0] 的位置是相同了(一种程式设计的定义?)。 是的 这个某处并不是纪录在某个变数里 以我以前回过的一篇文的讲法就是「它是绑在 a 这个符号上」 因此当有和它相关的位移运算时它就会把这个某处给代进去去运算 因此最後编译出来的程式中 这个值将会直接出现在指令上而不是存在某个变数里 : 我想问个观念是: : a 会等於 *a 这个现象, 我不太可以用指标变数 与 其所载的内容物的观念去理解它是吗 : ? 因为 a 代表着变数 a 的位置, 而 *a 是变数 a[0] 的位址 : 所以才会得到 a 与 *a 是相同的 : 第二个问题 int (*b)[3] : 让 b = a, 所以 b 的内容物是 0x22cd0c。这里让 b 反参考 *b 也会得到相同的位址。 : 虽然 b 与 b* 的型别不同, 但 b 与 *b 是相同的位址也是一种上面描述的关系吗 ? 你只能说 a 和 *a 所在的位址相同 (我相信你所谓"相同的"应是此意 但单说"相同的"非常容易让人(包括你自己)误解) 之所以你会陷入"看似相同的东西其实不同"的问题是因为你没有真的去看它的型态 来个简单一点的例子好了 我们拿掉一维 int x[2]; int *y; y = x; 你应该很清楚知道这个例子中 x x[0] *x y *y 的差别 x 是个 int 的阵列 x[0] 是其中的第一个 int *x 也会取得这第一个 int y = x 之後 y 这个指标指向上面这个阵列的开头 所以 *y 也会取得同样那第一个 int 再回到你的问题 int a[2][3]; int (*b)[3]; b = a; a 是个 int 的二维阵列 a[0] 是其中的第一列 *a 也会取得这第一列 b = a 之後 b 这个指标指向上面这个阵列的开头 所以 *b 也会取得同样那第一列 或者换个叙述方式 a 是个 int[3] 的阵列 a[0] 是其中的第一个 int[3] *a 也会取得这第一个 int[3] b = a 之後 b 这个指标指向上面这个阵列的开头 所以 *b 也会取得同样那一个 int[3] 这样对比叙述你就知道你鬼打墙在哪里了 之所以 b 和 *b 会看起来是一样的值的原因只不过是因为 *b 是那第一列 而我们只是用这第一列的开头位址来代表这一列而已 那因为是第一列所以正好这个开头位址和 b 所纪录的位置 (b 这个指标的值) 一样而已 a 和 *a 也一样 和 b 的差别在於 a 和 *a 都是代表某个阵列 那只是正好这两个阵列的代表值 (它的起始处) 相同而已 因此看起来它们也好像是一样的数字 但其实意义是不同的 --- 另外其实可以说一下 b = a; (或是我的例子中的 y = x;) 到底是什麽意思 y = x; 左边是个指标 右边是个阵列 这时它的意思是 "我把右边这个阵列的起始位址设给左边这个指标变数" 也就是其实它的意义是 y = &x[0]; 这样 我们将这个由阵列意义转变成指标意义的概念称做 decay 说成 "阵列 decay 成指标" 关於这个概念可参见 C FAQ 6.3 http://c-faq.com/aryptr/aryptrequiv.html (其实你可以好好把 C FAQ 第 6 章全部看过一遍 http://c-faq.com/aryptr/index.html 看完後再回来看我这两篇文章会对阵列和指标有更清楚的概念) -- 'Oh, Harry, don't you see?' Hermione breathed. 'If she could have done one thing to make absolutely sure that every single person in this school will read your interview, it was banning it!' ---'Harry Potter and the order of the phoenix', P513 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.28.92
1F:推 deh3215: 07/24 18:52
2F:推 Nairoda:感谢, 非常清楚 07/24 20:34







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP