首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

函数return是返回什么?该怎么解决

2012-03-11 
函数return是返回什么?比如int fun(){int aa 123return aa}这个RETURN是返回aa本身,还是aa的值啊?又比

函数return是返回什么?
比如
int fun()
{
  int aa = 123;
  return aa;
}
这个RETURN是返回aa本身,还是aa的值啊?

又比如
char *fun()
{
  return "str";
}
能不能这样返回一个字符串?
如果写成这样
char *fun()
{
  char *p = "str";
  return p;
}
p是局部变量,为什么也能返回字符串str?
如果改成char p[10] = {"str"};则不能返回str而是乱码,因为函数执行后局部变量被释放了。

上两个char*的函数怎么写正规?直接返回一个字符串return "str";好不好?

[解决办法]
char *fun()
{
char *p = "str";
return p;
}
指针p是局部变量,但是"str"字符串常量存放在常量区,指针p指向该常量区。常量区的生命周期与程序一样的长。所以有效。
[解决办法]
如果看过编译后的汇编代码,你会发现,return时,将其后的变量值,赋给就EAX(累加寄存器)后,函数就结束了,需要用到返回值时,再把EAX中的值拷贝到其它变量里.
所以一个EAX,可以放一个DWORD值,int值,或一个指针,当然如果你在函数外,还需要指针下的内容,你得保证指针下的内容不被释放.
[解决办法]


int fun()
{
int aa = 123;
return aa;
}

返回一个拷贝

热点排行