gpt4 book ai didi

c - 使用 increment(*p++ = x) 取消引用指针会将 *p 的值更改为 p

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:35 25 4
gpt4 key购买 nike

#include <stdio.h>
int main(){
int i=1;
int * p = &i;
*(p++)=4;

printf("%p\n", p); //0x7ffc000f47c8
printf("%u\n", p); //956816552 (which is 0x7ffc000f47c8 as unsigned integer)
printf("%u\n", *p); //956816552 (I would expect *p to be the value of whatever is in 0x7ffc000f47c8, and not the unsigned value of the pointer p (956816552))

return 0;
}

我希望 *pprintf() 是 0x7ffc000f47c8 中的任何值,而不是指针 p< 的无符号值 (956816552))

我何时/如何将 *p 的值设置为 956816552(p 的值)?

我相信 *p++ = 4 不是 UB。(根据第一个答案的评论 - Undefined behavior and sequence points )

任何帮助将不胜感激。谢谢。

最佳答案

执行增量 p++ 后,p 不能再被取消引用,因为它不再指向对象。程序为取消引用 p 调用未定义的行为,此时我们通常会说“程序错误”,修复程序,然后继续。

如果您对打印出的确切值感到好奇,该值可能只是 &i+1 恰好指向的内容的意外,也可能是其他内容。

注意:在这种情况下,增量本身是明确定义的。但是,如果您再次递增指针,就会遇到麻烦,因为您已经越过了 i 的末尾。

关于c - 使用 increment(*p++ = x) 取消引用指针会将 *p 的值更改为 p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36199297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com