返回本地创建的const char*

Mod*_*e77 5 c++ pointers return lifetime

#include <iostream>


const char* fun()
{
    const char* x = "abc";
    std::cout << "x = " << x << "\n";
    return x;
}


int main(int arc, char** argv)
{
    const char* y = fun();
    std::cout << "y = " << y << "\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上运行它给出:

x = abc

y = abc
Run Code Online (Sandbox Code Playgroud)

fun(),x(一个局部变量)被分配字面创建本地一个字符串的地址,然而,当该函数返回时,该数据指向y是作为通过指向同一x即使x超出范围.

有人可以详细解释这里发生了什么吗?

son*_*yao 6

这是格式良好的,返回的指针有效且没有悬空;因为字符串文字(即"abc")具有静态存储持续时间并且存在于程序的整个生命周期中。

字符串文字具有静态存储持续时间,因此在程序的整个生命周期中都存在于内存中。

正如您所说,当函数返回时,局部变量x会被销毁,但它指向的字符串文字不会。