C_and_CPP 板


LINE

※ 引述《Nairoda (new)》之铭言: : 我看书上说 : 如果设 int a[2][3] = {1,2,3,4,5,6} : 二维阵列名称 a 被定义为此阵列的起始记忆体位址。我的解读是: : 这二维阵列的数值在记忆体上被一个连续的记忆体区块储存着, 其中第一个位元组的记忆 : 体序号就是 a, 也就是 a = &a[0][0]。 : 书上说, a[0] 也可以被看成 (a[0])[3], 是一个一维的阵列, 而 a[0] 是此一维阵列的 : 阵列名称, 所以 a[0] 被定义是 (a[0])[3] 的第一个记忆体序号, 所以 a = &a[0][0]。 : 同理 a[1] 可以被看成 (a[1])[3], 是一个一维的阵列, 而 a[1] 是此一维阵列的阵列名 : 称, 所以 a[1] 被定义是 (a[1])[3] 的第一个记忆体序号, 所以 a = &a[1][0]。 : 事实上, 程式 run 出的结果也是这样。 : main(){ : int a[2][3] = {1,2,3,4,5,6}; : printf("a = %p\n", a); : printf("a[0] = %p\n", a[0]); : printf("a[1] = %p\n", a[1]); : } : 输出结果: : $ ./a.exe : a = 0x22cd0c : a[0] = 0x22cd0c : a[1] = 0x22cd18 : 我的问题是: : *a 输出的结果是 0x22cd0c : *(a+1) 输出的结果是 0x22cd18 : (问题一) : a 反参考後 (也就是 *a) 会得到与 a 相同的值, 这完全是因为被定义的结果吗? 我不可 : 以把 a 视为是阵列 a[2] 的位址对不对 ? 原因是不是 a[0] 与 a[1] 根本不是个变数 : ? : (问题二) : 如果我要接收 a 这个值的说, 要找一个相容的变数, 於是我设了一个指向 int [3] 的指 : 标 b: : int (*b)[3]; : b = a; : 这样是合法 ok 的 : 但是, b 的反参考是 *b, 也与 b 变数的值相等, 理由是不是来自於 (问题一) 中, 被定 : 义的情况一样? : 自己念书的怀惑, 请求各位的帮助, 谢谢! 像 a 这个名字除了它的位置(你讲的"值")以外 它的型态也很重要 a 它是个"在 0x22cd0c 的 int[2][3]" a[0] 它是个"在 0x22cd0c 的 int[3]" a[0][0] 它是个"在 0x22cd0c 的 int" 这种型态的差别决定了 *a 和 *(a[0]) 的解释结果不同 *a 会是一个"在某处的 int[3]" 而 *(a[0]) 会是一个"在某处的 int" 而某处在哪就是你上面提到的"值"了 也就是 *a 是 "在 0x22cd0c 的 int[3]" *(a+1) 是 "在 0x22cd18 的 int[3]" *(a[0]) 是 "在 0x22cd0c 的 int" 这个样子 b 的情况则不一样 它是一个 (位置在别的地方) 的指标 其内容为 0x22cd0c 那麽 *b 就只是单纯对这个指标内容进行提取而已 只是提取的结果是什麽就又要再看 b 的型态了 这里的 b 型态是 int(*)[3] 所以提取之後就是一个"在某处的 int[3]" 这边的某处因为 b 是指标 所以所指的某处就是 b 的值 因此 *b 就是一个 "在 0x22cd0c 的 int[3]" 这样应该可以让你了解为何"看起来"(印出来)一样的东西实际上会有不同解释 -- 所以很多地方才会说"阵列不完全等於指标 只是有时你可以互相换着用"就是如此 -- 1989/02/22 优希堂悟 1990/02/22 冬川こころ 1993/07/05 小町つぐみ 1994/05/21 高江 ミュウ 1995/04 欢迎来到 星野游々 1997/03/24 守野いづみ 1997/03/24 伊野瀬チサト 1998/06/18 守野くるみ 1999/10/19 打越钢太郎的 楠田ゆに 2000/02/15 樋口遥 2002/ 12/17 八神ココ 2011/01/11 HAL18於朱仓岳坠机 2011/04/02 ∞与∫的世界 茜崎空启动 2012/05/21 第貮日蚀计画预定 2017/05/01~07 LeMU崩坏事故 2019/04/01~07 某大学合宿 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.28.92
1F:推 ericinttu:还要配着在等号的左边还是右边来使用 (LHS/RHS) 07/24 11:33
2F:→ ericinttu:我只是补充说明噢 (路人经过 07/24 11:39
3F:→ xatier:跟着念一次:"阵列不等於指标" 07/24 13:17







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