返回局部变量的值。哪一个是不好的做法?

时间:2014-10-24 17:56:54

标签: c return-value scope

我的代码如下

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函数中,我只打印此返回值的值,即使这样它也能正常工作?

由于

1 个答案:

答案 0 :(得分:2)

第一个是不好的做法,会导致各种各样的问题。

如果函数的用户忘记释放指针,则第二个问题就出现了。

第三个是最好的选择,因为没有任何问题。

如果你需要传回一个更大的数据结构,将一个指针作为参数传递给它,并获得填充它的函数。