函数可以返回值,但不能返回没有指针变量的地址



为什么我们可以从函数返回局部变量的值,但不能返回它的地址?比如我们可以在 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();
}

fg都按值返回。

一个

返回一个int并将值存储在x中。现在,x保留了之前在a6的值。

另一个函数返回一个指针并将指针值存储在 y 中。现在y保存以前存储在 p 中的值。

问题只是指针现在无效(悬空),因为p指向的东西不再存在。

实际上,你可以。

但是你必须像这样正确定义你的函数:

int a = 0;
int* ReturnValAddress()
{
    return &a;
}
虽然你可以发送任何局部变量地址,

但请注意,发送函数的局部变量地址没有任何意义,因为返回后,局部变量会立即死亡!,但你可以像上面的代码一样发送全局变量地址。

最新更新