gpt4 book ai didi

c++ - 取消引用预先增加的指针会产生奇怪的结果

转载 作者:行者123 更新时间:2023-11-30 00:55:07 24 4
gpt4 key购买 nike

这一定是个愚蠢的问题,但我无法理解为什么会这样

int main()
{
int i=20;
int *p=&i;
cout<<"old p="<<p<<endl;
*(++p) = 10;
cout<<"p="<<p<<endl;

}

在这段代码中,我得到的输出是:旧 p=0x22ff08p=oxa

为什么指针的值变为 10(0xa) 而不是递增较早的地址并将 10 分配给该位置?

最佳答案

Why is the value of the pointer getting changed to 10(0xa) instead of incrementing the earlier address and assign 10 to that location?

到什么地方? 没有这样的位置p 指向一个 int,而不是 int 数组。此类增量产生的指针不指向您可以执行间接寻址的位置。像这段代码那样尝试这样做具有未定义的行为,这意味着绝对有可能发生任何事情。编译器可以自由地做任何它想做的事,因为对需要发生的事情没有任何要求。不要这样做。

在您的特定实验中,似乎这两个变量彼此相邻,并且当递增时,变量 p 最终指向自身,然后赋值为 10,即十六进制的 A。当您使用不同的编译器版本或编译器选项进行编译时,或者即使您对代码进行了看似无害的更改,也无法保证这种情况会再次发生。不要这样做。

关于c++ - 取消引用预先增加的指针会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926711/

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