【发布时间】:2018-12-07 00:02:31
【问题描述】:
#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;
}
在我的机器上运行它会得到:
x = abc
y = abc
在fun()中,x(一个局部变量)被分配了一个本地创建的字符串字面量的地址,但是当函数返回时,y指向的数据与@指向的数据相同987654326@ 即使x 超出范围。
有人可以详细解释这里发生了什么吗?
【问题讨论】:
-
你缺少的一点是一个函数可能总是返回一个它自己类型的值。指针的警告是函数返回后它们指向的内容必须仍然存在。 @songuyanyao 解释如下。
标签: c++ pointers return lifetime string-literals