gpt4 book ai didi

c++ - 如何解释这个奇怪的输出?关于指针和临时变量

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

谁知道为什么输出是这样的?
虽然这样使用指针是错误的,但我仍然想了解它为什么会这样。

int* foo()
{
int a=9;
int *p=&a;
//definitely not right to return a pointer to an invalid varible
return p;
}
int main(int argc, char* argv[])
{
int *p=foo();
cout<<*p<<endl;//9
cout<<*p<<endl;//2357228
*p=2;
cout<<*p<<endl;//2
(*p)++;
cout<<*p<<endl;//2357229
cout<<*p<<endl;//2357228
cout<<*p<<endl;//2357228
(*p)++;
cout<<*p<<endl;//2357229
cout<<*p<<endl;//2357228

return 0;

}

最佳答案

返回指向函数局部变量的指针/引用会导致未定义的行为。本地/自动变量保证仅在定义它的范围({,}) 内有效且不超出该范围。

未定义行为是指程序可以表现出任何行为,C/C++标准允许这样做。在未定义行为发生后试图寻找观察到的行为的原因是没有意义的,因为这种行为可能/也可能不会一致或不可靠。

从好的方面来说,任何优秀的商业编译器都会为您提供有关此类代码的警告。

关于c++ - 如何解释这个奇怪的输出?关于指针和临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042490/

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