我的代码如下
main(){
int *a;
a = fun1():
printf("%d",&a);
}
我的乐趣是
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函数中,我只打印此返回值的值,即使这样它也能正常工作?
由于
答案 0 :(得分:2)
第一个是不好的做法,会导致各种各样的问题。
如果函数的用户忘记释放指针,则第二个问题就出现了。
第三个是最好的选择,因为没有任何问题。
如果你需要传回一个更大的数据结构,将一个指针作为参数传递给它,并获得填充它的函数。