+ -
当前位置:首页 → 问答吧 → 关于函数返回值的问题

关于函数返回值的问题

时间:2011-12-27

来源:互联网

搞不清函数返回值的问题,请教大家。
  函数内部的变量存在栈区,当函数有返回值时是不是有这几种情况?返回一个指向栈区的地址(错误)。返回一个指向堆区的指针,返回一个指向常量区的指针(比如字符串)。返回一个常量。现在我搞不懂这个常量,他也是存在常量区吗?再有就是如果我返回函数形参,是不是也是返回一个栈上的一个副本。

作者: humingchun   发布时间: 2011-12-27

返回一个常量。常量的值 应该是存在EAX里面的吧?

作者: xulai1001   发布时间: 2011-12-27

我现在好困惑哦

作者: humingchun   发布时间: 2011-12-27

期待大牛们来解惑啊 

比如
int fun(int a){
  int b = a;
  return b;
}
b指向栈区,这个没疑问

int fun(int a){
  
  return a;
}
这里应该也是指向栈区吧?

牛牛们 求教啊

作者: humingchun   发布时间: 2011-12-27

再有就是
int fun(int a, int b){
  // operations
  return 0;
}
那这个常数0呢?
寄存器的一个值?还是常量区里的啊 纠结啊

作者: humingchun   发布时间: 2011-12-27

在返回之前,
一般将值存到了EAX寄存器里,
或者存到了全局变量里,
或者是某个变量的引用或者指针指向的地方

作者: agoago_2009   发布时间: 2011-12-27

无名 12:31:22 
int fun(int a){
  return a;
}
形如这种的应该是返回栈内的一个值?这种说法对不对啊
 
无名 12:32:21 
如果是函数返回值直接返回一个常量呢 比如 return 1; 越搞越晕了
 
大熊_c 12:33:02 
是的 
无名 12:34:30 
int fun(int a){
  return a;
} 那这种做法是不是不可取啊 是不是会有垃圾值的情况? 
大熊_c 12:34:44 
是的 
大熊_c 12:34:52 
可以先不管栈的概念 
大熊_c 12:35:08 
int fun(int a){
  return a;
}
这个函数里,a是个局部变量 
无名 12:35:16 
嗯  
大熊_c 12:35:23 
也就是说,离开了这个函数
a这个局部变量就不存在了 
无名 12:35:38 
那返回1 比如return 1; 这种怎么理解呢 
大熊_c 12:35:59 
那么,把局部变量a返回出去
这个结果是不能保证的,因为局部变量已经不存在了 
大熊_c 12:36:17 
1不是局部变量,是个常量
返回不会有问题 

作者: humingchun   发布时间: 2011-12-27