函数返回值与局部变量的关系,一直没有搞懂
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根本没有影响