C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) macOS 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) VS code 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 求输出 喂入的资料(Input):预期的正确结果(Expected Output): 不知道 错误结果(Wrong Output): 没有错误结果 程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档) https://pastebin.com/J3ysYEgV int main(){ int a[5] = {1, 2, 3, 4, 5}; int *p = (int *)(&a + 1); printf("%d, %d",*(a+1), (*p-1)); return 0; } 补充说明(Supplement): 最近在读C,看到这一题, 熊熊看看不出端倪,於是喂进去试跑看看, 输出是2, 0, 但上网找,大家都说答案是2,5 第一个是2没什麽争议,有点不太懂为什麽第二个输出是5,我比较认同我的编译器XD 我对int *p = (int *)(&a+1);的理解是这样:取得a这个地址再加1内的值, 而1为int,所以应该是加上4个bytes, 不过,a本身就是一个指标,&a不就是指标的指标吗?但是没有特别去宣告这个指标的指标 所以应该会不合法,因此输出为0合情合理, 但网路上的答案都说是5, 解释是:可把a[5]当成一个二维阵列,只存放一个element, 意即:int a可看成{{1,2,3,4,5}} 所以&a是这个 ^ {{1,2,3,4,5}} 而&a+1是这个 ^ 因为没有第二个element,所以答案是5 也点摸不着头绪啊!! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.241.74 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1626962916.A.D4B.html
1F:→ nh60211as: https://wandbox.org/permlink/YC4vQWlolr41CYoh 07/22 22:28
2F:→ nh60211as: int* p 已经指到 a[] 的外面了 07/22 22:28
所以应该要马undifine要马0是吗? ※ 编辑: ericerix (118.160.241.74 台湾), 07/22/2021 22:31:31
3F:→ sarafciel: a不是指标 a是int[5], &a是pointer to int[5] 07/22 23:32
4F:→ sarafciel: sizeof(int[5])是20byte 所以这边&a+1直接多20byte超界 07/22 23:36
5F:→ loveme00835: 你知道为什麽拿掉转型 (int*) 会吐 warning 吗? 还是 07/23 00:37
6F:→ loveme00835: 你不知道为什麽要这样写? 07/23 00:38
我不太清楚为什麽需要加上转型 我其实是不知道为什麽编译器出来会是0,而网路上大家会说是5, 我认为应该是超界,但我不知道会是什麽答案(超界该怎麽表示?) ※ 编辑: ericerix (118.160.241.74 台湾), 07/23/2021 00:59:11 ※ 编辑: ericerix (118.160.241.74 台湾), 07/23/2021 01:13:04 我稍微查了一下, 大概是说a是array第一个element的位址, 而&a是这个array的位址, 所以a, &a是一样的, pointer如果去+1会是加上这个结构的大小, 所以a+1应会加上4个bytes,也就是到达&a[1], 而&a+1,因为&a代表整个array的头的位址,+1下去会加上整个结构的大小, 所以在这个case会加上20个bytes,也就是会到达类似&a[5]的位址, 会超出a的界线。 但这题是在问,这个位址的内容物大小是多少, 但是我根本不知道超界之後的位址内容长怎样,要如何作答? 照着一楼大大的网址来看,内容应该是全为ff..f?不太清楚 另外我也不知道为何int *p = (int *)(&a+1);这里需要转型 还请高手们替我解答 谢谢大家! ※ 编辑: ericerix (118.160.241.74 台湾), 07/23/2021 01:21:01
7F:→ lgen7604: 我猜原始程式是不是要把 (*p-1) 改成 *(p-1)? 07/23 01:19
这样看起来合理多了XDD 看来是我抄题抄错了(? 不然超界的位址是多少谁知道呢 ※ 编辑: ericerix (118.160.241.74 台湾), 07/23/2021 01:22:53







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灯, 水草

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

TOP