函数返回指针

Function return pointer

本文关键字:指针 返回 函数      更新时间:2023-10-16

下面的例子让我更困惑。据我所知,局部变量不会通过指针或引用返回。例如

char * foo()
{
  return "Hello world";
}
int*  fooo() {
    static int i = 100;
    return &i;
}

两种情况下会发生什么?

字符串字量是静态存储的,当然static int i也是静态的。可以从函数中返回指向静态变量的指针,因为它们不是局部变量,并且在退出函数时不会像堆栈分配的变量那样销毁它们。另一方面,您的第一个示例应该返回const char *

来自c++标准节lex.string:

一个字符串字面值…类型为"n个const char的数组"和静态存储持续时间(basic.stc),其中n是下面定义的字符串的大小,并使用给定的字符进行初始化…

第一个代码将无法编译。您可以将字符串强制转换为char数组并返回。第二段代码可以编译,但是变量将超出作用域。因此,当函数返回时,您将拥有的引用将不再有效。按地址返回一个局部变量是不好的。想要这种行为有什么特别的原因吗?

您可以新建/malloc一个char数组或int,然后返回它。只要不手动释放/删除内存,就可以保证在作用域中拥有该变量。然后,您可以愉快地从其他函数访问内存。

第一个函数无效,您应该返回

const char*

,是的,你可以返回static变量的地址:当函数返回时,它们不会被销毁,因为它们被分配在静态数据内存段