函数返回指针

时间:2013-04-24 03:25:51

标签: c++ pointers

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

char * foo()
{
  return "Hello world";
}

int*  fooo() {
    static int i = 100;
    return &i;
}

两种情况都会发生什么?

3 个答案:

答案 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变量的地址:当函数返回时它们不会被销毁,因为它们在静态数据存储段中被定位

相关问题