我的代码如下
main(){
int *a;
a = fun1():
printf("%d",&a);
}
我的乐趣1是
int* fun1(){
int a = 10;
return &a;
}
另一个版本是
int* fun1(){
int* a = malloc(sizeof(int));
*a = 10;
return a;
}
现在,我猜测在第一个函数中,当我在函数中执行 int a = 10
时,它将创建一个局部变量 a。如果我尝试将该变量的地址传递到函数外部,它将超出范围,因此当我再次从 main 中引用它时,我将得到垃圾值。
但是在第二种情况下,因为指针是局部变量,所以当我返回它时,我得到了地址的副本,但是因为我现在有了地址,(即使在与它在内部的不同位置fun1()),我可以从 main 引用它。
是吗?我的理解正确吗?
此外,如果不是返回指向 int 的指针,而是返回 int。
int fun(){
int a = 10;
return a;
}
在 main 函数中,我只打印这个返回值的值,这样它就可以正常工作了吗?
谢谢
最佳答案
第一个是不好的做法,会导致各种问题。
如果函数的用户忘记释放指针,第二个就会出现问题。
第三个是最佳选择,因为没有任何问题。
如果你需要传回一个更大的数据结构,传递一个指向它的指针作为参数,并获取函数来填充它。
关于c - 局部变量的返回值。哪一个是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553558/