#include
using namespace std;
int& myfun2()
{
int b;
b = 10;
return b;
}
int main()
{
int &b3 = myfun2();
printf("b3:%d\n", b3);
printf("b3:%d\n", b3);
system("pause");
}
请教,为什么两个printf的输出结果不同,按说b3应该是乱码,可是第一个printf会输出10,是什么原因
因为返回的是局部变量的引用,因为你b3访问的时候,随时可能局部变量b释放了,所以输出乱码或10都有可能,这是未定义行为。
printf("b3:%d\n", b3); //返回的是局部变量地址,只是地址内容还没有释放
printf("b3:%d\n", b3); //未定义数据
int& myfun2()
{
int b;
b = 10;
return b;
}
int main()
{
int &b3 = myfun2();
Sleep(1000); //延时1S,你在看看。。。b3 = 0
printf("b3:%d\n", b3);
printf("b3:%d\n", b3);
system("pause");
}