返回const char *的函数

时间:2014-11-24 13:39:44

标签: c++ pointers 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()返回的指针仍然指向到应用程序内存中的有效地址(意思是&#34; Hello!&#34;成功发送到输出)。为什么呢?

同样的事情

const int *f()
{
    int i = 5;
    const int *p = &i;

    return p;
}

int main()
{
    cout << *f() << endl;
    system("pause");
    return 0;
}

任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

你学到的东西是正确的,允许使用本地函数变量
在功能结束后不再(即他们用过的记忆) 如果它目前有效,那只不过是巧合:
在此期间没有其他代码使用过这段记忆 对于自己的东西,旧的价值仍然存在。

答案 1 :(得分:0)

您的第二个代码段会导致未定义的行为。 似乎工作的原因是,你很幸运,内存没有被覆盖。

但是(如下面提到的评论中)第一个片段有效。