函数返回指针
Function return pointer
下面的例子让我更困惑。据我所知,局部变量不会通过指针或引用返回。例如
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
变量的地址:当函数返回时,它们不会被销毁,因为它们被分配在静态数据内存段
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 为什么要为指针返回类型返回一系列字符?
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- 将原始指针返回到智能指针
- 从函数中的指针返回对象,例如链接列表
- 将指针返回使用New创建的数组数组
- 查找并将指针返回向量中的对象
- 函数可以将指针返回其自己的类型
- 指针返回值的地址
- 为什么静态指针返回函数中有一个"静态"键?
- 从弱指针返回类型返回共享指针
- 如何将C++引用和指针返回转换为 C++/CLR
- 从指针返回对象时出现意外的析构函数调用
- 阵列指针返回垃圾
- (C )当在同一类中调用时,污点指针返回正确的值,而从MAIN调用时为0
- C 从指针返回到成员功能
- 在构造函数以外的任何其他位置访问相机时,我的相机指针返回 null
- 从取消引用的指针返回原始指针
- 指针返回