牛客题目:
string& test_str()
{
string str = "test";
return str;
}
int main()
{
string& str_ref = test_str();
cout << str_ref << endl;
return 0;
}
A.编译警告
B.返回局部变量的引用,运行时出现未知错误
C.正常编译且运行
D.把代码里的&都去掉之后,程序可以正常运行
答案:A B D
分析:在C语言中,局部变量是分配在栈空间上的, 当函数调用结束后,由编译器释放.
通过调用test_str得到了他的局部变量的内存地址, 然而在main函数中调用函数时,这个内存地址被”破坏”了, 所以出现了这个意想不到的结果.
所以我们在书写C语言程序时候, 如果返回指针(变量地址),应该返回堆区或者全局区的,这样就可以避免这个”意想不到的”结果