为什么我们可以从函数返回局部变量的值,但不能返回它的地址?比如我们可以在 C 中写 'return a' 但不能写 'return &a'。
注释中示例的修改版本:
#include <stdio.h>
int* f() {
int a = 6, *p;
p = &a;
return p;
}
int g() {
int a = 6;
return a;
}
int main() {
int x = g();
int* y = f();
}
f
和g
都按值返回。
返回一个int
并将值存储在x
中。现在,x
保留了之前在a
中6
的值。
另一个函数返回一个指针并将指针值存储在 y
中。现在y
保存以前存储在 p
中的值。
问题只是指针现在无效(悬空),因为p
指向的东西不再存在。
实际上,你可以。
但是你必须像这样正确定义你的函数:
int a = 0;
int* ReturnValAddress()
{
return &a;
}
虽然你可以发送任何局部变量地址,但请注意,发送函数的局部变量地址没有任何意义,因为返回后,局部变量会立即死亡!,但你可以像上面的代码一样发送全局变量地址。