写作绅士,读作丧尸 X岛揭示板
顺猴者昌 逆猴者亡 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 官方公众号:【X岛揭示板】 官方微博: 【@X岛极速版】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.60417043 - 无标题 - 技术宅


回应模式
No.60417043
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

无标题 无名氏 2023-12-04(一)12:49:09 ID:MYwW17N [举报] [订阅] [只看PO] No.60417043 [回应] 管理
int a0[0,3] = { 1,2,3 };
printf("%d\n", *(*&a + 1)-1));
//output:3
能解释一下这个的逻辑吗?
( ゚ᯅ 。)
无标题 无名氏 2023-12-04(一)12:50:41 ID:MYwW17N (PO主) [举报] No.60417063 管理
草,数组变骰子了,岛的锅
int a[3] = { 1,2,3 };
printf("%d\n", *(*&a + 1)-1));
//output:3
能解释一下这个的逻辑吗?
( ゚ᯅ 。)
无标题 无名氏 2023-12-04(一)12:55:42 ID:N2MyFjB [举报] No.60417128 管理
不懂,顶顶
无标题 无名氏 2023-12-04(一)12:56:41 ID:V4B01Ui [举报] No.60417139 管理
po你确定你的代码括号匹配吗?
无标题 无名氏 2023-12-04(一)12:57:19 ID:V4B01Ui [举报] No.60417145 管理
如果是*(*&a+1)-1我这边运行结果是1啊,我感觉你题目括号输的有问题
无标题 无名氏 2023-12-04(一)13:04:49 ID:V4B01Ui [举报] No.60417216 管理
或者原题是不是*(*&a+1)+1啊,总之a代表数组开头的指针,&a代表这个指针的指针(地址),*(&a)又回到这个数组开头的指针了,其他应该都能懂了
无标题 无名氏 2023-12-04(一)13:12:01 ID:B15U5vD [举报] No.60417295 管理
*(elem) 数据类型,在+1或-1的时候,挪动一个sizeof(elem)的大小
也就是int* p_int +1会指向下一个int开始的位置
无标题 无名氏 2023-12-04(一)13:12:49 ID:B15U5vD [举报] No.60417306 管理
而且我觉得你给出来的代码输出是1
有打错字吗?
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2023-12-04(一)13:41:19 ID:MYwW17N (PO主) [举报] No.60417549 管理
printf("%d\n", *(*(&a + 1)-1));
无标题 无名氏 2023-12-04(一)13:43:46 ID:MYwW17N (PO主) [举报] No.60417576 管理
漏了个括号⊂彡☆))∀`)
无标题 无名氏 2023-12-04(一)13:47:14 ID:V4B01Ui [举报] No.60417608 管理
>>No.60417549
这写的不是很清晰嘛( ゚∀。)7"
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2023-12-04(一)13:48:43 ID:MYwW17N (PO主) [举报] No.60417628 管理
分享图片
无标题 无名氏 2023-12-04(一)13:50:53 ID:MYwW17N (PO主) [举报] No.60417665 管理
>>No.60417608
前面一步已经取值了,为什么能对值作指针的操作嘛( ;´д`)
无标题 无名氏 2023-12-04(一)13:56:11 ID:V4B01Ui [举报] No.60417717 管理
>>No.60417665
a是指针
&a是指针的指针
&a+1是指针的指针往后移了一整个数组的长度
*(&a+1)是指针,指在“a1[0,3]”这个位置
*(&a+1)-1是指针,指在“a2[0,2]”这个位置
无标题 无名氏 2023-12-04(一)13:57:35 ID:MYwW17N (PO主) [举报] No.60417732 管理
>>No.60417717
懂了,a是指针(;´Д`)
感谢,我是弱质
无标题 无名氏 2023-12-04(一)13:59:11 ID:MYwW17N (PO主) [举报] No.60417749 管理
>>No.60417717
不对,二级指针这么操作不会变野指针吗
无标题 无名氏 2023-12-04(一)14:00:50 ID:V4B01Ui [举报] No.60417760 管理
>>No.60417749
所以他又减一了。。
无标题 无名氏 2023-12-04(一)14:29:49 ID:B15U5vD [举报] No.60418079 管理
>>No.60417628
这里触发UB了吧(Undefined behavior, 未定义行为)
无标题 无名氏 2023-12-04(一)15:26:36 ID:B15U5vD [举报] No.60418616 管理
>>No.60417760
也会野指针
无标题 无名氏 2023-12-04(一)16:13:35 ID:wPfGExo [举报] No.60419164 管理
>>No.60417749
没有野指针啊,所有的指针的值都很明确
假如数组 a 的地址值是 0,那么指针 &a 的值是0
指针 &a+1 的值是 0 + sizeof(a), 而sizeof(a) = sizeof(int) * 3, 所以 &a+1 的值是 0+sizeof(int) * 3
由于数组类型的特殊性质,*(&a+1) 的值也是 0+sizeof(int) * 3,即 *(&a+1) == &a+1
又因为*(&a+1) 的类型也是数组(一个实际上不存在的数组),*(&a+1) - 1 的地址值是 0+sizeof(int) * 3 - sizeof(int) = 0+sizeof(int) * 2,并且*(&a+1) - 1 的类型是 int*
*(*(&a+1) - 1) 是对 *(&a+1) - 1 解引用的值,由此可知,*(*(&a+1) - 1) 就是第三个元素的值。

UP主: