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