关于c ++:返回字符数组或指向char文字的指针时的区别

Difference when returning an array of chars or a pointer to char literal

我了解到,当我初始化一个字符数组时,就像初始化指向字符的指针一样。但是,如果是这种情况,为什么下面的代码会输出奇怪的字符?

1
2
3
4
5
char* returnMe()
{
    char text[] ="Will I live forever?";
    return text;
}

而以下代码:

1
2
3
4
5
char* returnMe()
{
    char* text ="Will I live forever?";
    return text;
}

输出:

Will I live forever?

这两个初始化之间到底有什么区别?它们都像指针,所以如果我这样做:

1
puts(X); //puts get char* as a parameter in it.

这两种情况都适用(当我还没有超出范围时)。


包含此项的函数:

1
 char text[] ="Will I live forever?";

返回一个指向名为text的局部变量的指针,该变量包含字符串"我会永远活着吗?".与所有局部变量一样,该变量在函数返回后会蒸发,因此如果试图访问它,则会在未定义的行为域中关闭。

包含此项的函数:

1
 char* text ="Will I live forever?";

返回一个指向内存中某个神奇位置(但不是局部变量)的指针,该位置包含字符串,该字符串将在程序执行时一直存在,因此使用该指针不是未定义的行为。