虽然下面的代码确实有效,但我不知道为什么。请解释我。返回const char的函数*
#include <iostream>
using namespace std;
const char *f()
{
const char *p = "Hello!\n";
return p;
}
int main()
{
cout << f() << endl;
system("pause");
return 0;
}
从我了解到,在F中的7个字符()是在栈上分配(?),这意味着他们的记忆将尽快公布为f()结束,然而,指针为f返回()仍指向应用程序内存中的有效地址(表示“Hello!”已成功发送到输出)。为什么?
同样的事情会为
const int *f()
{
int i = 5;
const int *p = &i;
return p;
}
int main()
{
cout << *f() << endl;
system("pause");
return 0;
}
任何人都可以阐明这一些轻?
只有第二个片段调用UB,第一个就好了。 – 2014-11-24 13:42:52