以下案例让我更加困惑。据我所知,局部变量不会通过指针或引用返回。例如
char * foo()
{
return "Hello world";
}
int* fooo() {
static int i = 100;
return &i;
}
两种情况都会发生什么?
答案 0 :(得分:5)
字符串文字是静态存储的,当然static int i
也是静态的。您可以从函数返回指向静态变量的指针,因为它们不是局部变量,并且当您以堆栈分配的变量退出函数时它们不会被销毁。另一方面,您的第一个示例应返回const char *
,
从C ++标准部分lex.string:
字符串文字...具有类型“n const char数组”和静态存储持续时间(basic.stc),其中n是下面定义的字符串的大小,并使用给定的字符初始化...
答案 1 :(得分:0)
第一个代码无法编译。您可以将字符串转换为char数组并返回。第二个代码将编译,但您的变量将超出范围。因此,函数返回时将具有的引用将不再有效。按地址返回局部变量是不好的。是否有任何特定原因想要这种行为?
你可以new / malloc一个char数组或int,然后返回它。只要不手动释放/删除内存,就可以保证变量在范围内。然后你可以愉快地从其他功能访问内存。
希望这有帮助。
答案 2 :(得分:0)
你的第一个功能无效,你应该返回
const char*
并且是的,您可以返回static
变量的地址:当函数返回时它们不会被销毁,因为它们在静态数据存储段中被定位