C/C++函数临时变量生命周期/引用问题

#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");
}