C_and_CPP 板


LINE

※ 引述《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 ------------------------ 以下是 C 的分隔线 ---------------------------- 我们先回到幼儿班, 当我们宣告定义一个 int a 时,在记忆体中 [注1] 产生下面 这样子的配置: ┌───┐ │ a │ └───┘ a 代表的就是这一格房间,一般在作为运算元运算时代表的是这一格的值。 那这个房间有多大呢 ? 没错,是 sizeof(int) 那取址运算子 (&) 套用在 a 身上会得到甚麽 ? 照规定就是这一格房间的开头位 元组的位址 : ┌───┐ │ a │ ├───┘ &a 故事就结束了。 例如 int b[3] 定义了一个阵列,在记忆体中长这个样子 : ┌───────────┐ │ b │ └───────────┘ b 代表是阵列,也就是这一整格房间。这格房间有多大呢 ? sizeof(int[3]) 那这一格房间里面有甚麽呢 ? 所以如果我们把 b 再看细一点: ┌───┬───┬───┐ │ b[0] │ b[1] │ b[2] │ └───┴───┴───┘ 没错, 当然就是 b[0], b[1], b[2] 这三格小房间。 那 &b 代表的位址是哪里呢 ? 阿, 刚刚不是才说过 &a 吗,当然就是这格房间的 开头: ┌───────────┐ │ b │ ├───────────┘ &b 同理,如果我们看细一点: ┌───┬───┬───┐ │ b[0] │ b[1] │ b[2] │ ├───├───├───┤ &b[0] &b[1] &b[2] &b[3] (注2) 很显然地, 我们眼睛直直的看就可以发现 &b 跟 &b[0] 代表的是同一个位址,只 是他们的型态是不同的喔。 那剩下的问题就是 b 作为运算元运算的时候是代表甚麽 ? a + 1 你会知道是把 a 里面的值加上 1,那如果把 b + 1 之类的有甚麽意义 ? 照 C99 标准: 除了作为 sizeof 或 & 运算子的运算元,或者是用来初始化阵列的字串字面常 数外,一个型态为 "以某型态为元素的阵列" 的运算式会被转为型态为 "指向某 型态的指标",且该指标会指向该阵列的第一个元素。 讲白话就是 b 如果不拿来做 sizeof(b) 或 &b,那 b 就会被转成 &b[0] 所以 b + 1 就会变成 &b[0] + 1,而如果你知道指标运算的话就会发现 &b[0] + 1 等於 &b[1],依此类推。 所以 &b 跟 &b[0] 会一样是本来配置的结果的,而 b 作为一般运算元时也会转为 &b[0] 最後的大团圆结局: b ┌───┬───┬───┐ │ b[0] │ b[1] │ b[2] │ ├───├───├───┤ &b[0] &b[1] &b[2] &b[3] b b+1 b+2 b+3 <--- (注3) &b 注1: 这里说的记忆体是指 C 语言内部的抽象机器, 跟物理上的记忆体不必要相关。 注2: &b[3] 是合法的, 即使 b 阵列只有 3 个元素 注3: 当 b 不是用来做为 sizeof(b) 或 &b 时,会被转为 &b[0] --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.122.83.198
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1431504257.A.1CA.html
1F:→ Feis: 天阿, 我有上色强迫症 05/13 16:20
2F:推 wenyonba: 这样很清楚啊!我用IDE的时候也会一堆颜色XD 05/13 16:25
※ 编辑: Feis (140.122.83.198), 05/13/2015 16:33:10
3F:推 johnjohnlin: 清楚推一个~ 05/13 21:11
4F:推 waniac: 推 05/13 21:17
5F:推 k387259: 推 图解容易多了 05/14 02:50
6F:推 chen20: 推~~ 05/14 08:28
7F:推 TobyH4cker: 谢谢老师 05/14 08:47







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