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

函数返回值与局部变量的关系,一直没有搞懂解决思路

2012-02-27 
函数返回值与局部变量的关系,一直没有搞懂Primer教材介绍:1 不能返回局部对象的引用;2 不能返回指向局部对

函数返回值与局部变量的关系,一直没有搞懂
Primer教材介绍:
1 不能返回局部对象的引用;
2 不能返回指向局部对象的指针

关于第二条一直没有弄懂。
比如下面的代码:

char* strcpy(char* strDest,const char* strSrc)
{
  char*add = strDest;

  ...

  return add;//strDest为局部变量,此时不是返回了指向局部对象的指针了吗?
}

[解决办法]
他返回的是局部对象的值,而不是局部对象的地址,返回值是可以的
[解决办法]
2 不能返回指向局部对象的指针 

你的sample code返回的指针不是指向局部对象。
[解决办法]
楼主的这句话不正确:"return add;//strDest为局部变量,此时不是返回了指向局部对象的指针了吗? "

strDest是局部变量,是个指针,但它比不一定(你的代码中看不出来)指向局部对象,add和它的值是一样的,strDest在不在没关系的
add和strDest共同志向的内存还在啊,这块内存不一定是局部变量,
[解决办法]
char* strcpy(char* strDest,const char* strSrc)
{
char*add = strDest;

...

return add;//strDest为局部变量,此时不是返回了指向局部对象的指针了吗?
}----------------------1
上面的调用没有问题,返回的不是strDest而是strDest所指向的内存单元。
add和strDest都指向同一个单元,add 和 strDest只是中间的传递媒介。
char* pRet = strcpy(str1,str2);
上面的调用执行后可以保证 pRet add strDest都指向 str1所引用的内存单元,
但add strDest的销毁对pRet根本没有影响





热点排行