在函数中分配内存时,是否不可能通过返回其地址来使用函数外部的内存?
有例外吗?以下似乎是这样一个“例子”:
const char * f() {
return "HELLO";
}
如何解释?
谢谢!
答案 0 :(得分:3)
字符串文字是静态分配的,因此返回像“HELLO”这样的字符串文字的地址是安全的,并且它可以在函数外部使用而没有任何问题。
答案 1 :(得分:3)
为什么你认为这是不可能的?听起来你会把它与不将 local 变量的地址返回给调用函数的规则混淆。您不能这样做,因为函数本地的变量仅在该函数调用的持续时间内具有生命周期;一旦函数返回,那些变量就变成了垃圾。
有些事物的生命周期超出了函数调用的生命周期;可以将地址返回给他们。这些事情的例子是在堆上分配的内存块(例如,使用malloc
),或者是具有静态存储持续时间的内容(例如全局变量和字符串文字)。
答案 2 :(得分:2)
“你好”是一个常数。它不会消失所以可以使用指针。一个局部变量是另一个故事......