返回字符数组或指向char literal的指针时的区别

时间:2017-02-15 21:55:52

标签: c++ arrays pointers

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

char* returnMe()
{
    char text[] = "Will I live forever?";
    return text;
}

以下代码:

char* returnMe()
{
    char* text = "Will I live forever?";
    return text;
}

输出:

  

我会永远活着吗?

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

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

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

1 个答案:

答案 0 :(得分:10)

包含此功能的函数:

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

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

包含此功能的函数:

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

返回一个指向内存中某个魔术位置的指针(但不是一个局部变量),该指针包含该字符串,该字符串会持续执行程序,因此使用该指针不是未定义的行为。