int& geta()
{
int a=20;
return a;
}
int main()
{
int& a1=geta();
printf("%d\n",a1);
printf("%d\n",a1);
return 0;
}
结果 20
5307168//这个数每次运行结果都不一样
为什么两次的结果不一样?
为什么a都不存在了还能通过引用输出一次20,第二次输出结果就成了一个不固定的数???求解答,非常感谢
int& geta()
{
int a=20;
return a;
}
int main()
{
int& a1=geta();
printf("%d\n",a1);
printf("%d\n",a1);
return 0;
}
结果 20
5307168//这个数每次运行结果都不一样
为什么两次的结果不一样?
为什么a都不存在了还能通过引用输出一次20,第二次输出结果就成了一个不固定的数???求解答,非常感谢
2 回答1.7k 阅读✓ 已解决
2 回答995 阅读✓ 已解决
2 回答2.8k 阅读
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答916 阅读
1 回答1.1k 阅读
两次的输出均是未定义行为(undefined behavior),因为函数的返回值是局部变量的引用,而局部变量在函数执行结束时就会被销毁,所以在函数外使用返回的引用是未定义的。至于第一次输出为20可能跟编译器有关,不同的编译器对于未定义行为的处理方式不同,如果换一个编译器可能两次都会输出随机数。