读书人

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

发布时间: 2012-03-11 18:15:38 作者: rapoo

函数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;
}

返回一个拷贝

读书人网 >VC/MFC

热点推荐