小弟我的发问:函数返回局部指针的有关问题
我的发问:函数返回局部指针的问题本帖最后由 AILOONG 于 2013-10-03 22:46:52 编辑void * __cdecl memcpy
我的发问:函数返回局部指针的问题
本帖最后由 AILOONG 于 2013-10-03 22:46:52 编辑
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}
上面是memcpy库函数,一时间找不到其他的,暂且拿来做分析吧
指针ret是函数的局部指针,不是说不鼓励返回函数的局部指针吗?
为何该库函数这样子写? c 局部指针
[解决办法]你这个返回的可以说不是局部的吧!
void * ret = dst; 是传进来字符串地址的!
返回的是传进来的参数地址的!
[解决办法]此函数的目的从src拷贝count字节到des中去,然后返回目的buf首地址。
函数体中直接操作的是局部变量des指针,如果不用局部变量ret事先保留副本,那么执行完毕后(des不断后偏移),返回des就不是首地址了,这就错了。
这里返回地址只是一个外部已经存在的地址,所以不会出现问题。
相反,如果外部不存在,而只在局部与函数内部,那么返回出去,就麻烦大了!这才是返回指针真正要害
[解决办法] void * ret = dst; //ret这个指针变量是局部变量,但是指向的内容不是局部变量。
[解决办法]指针变量定义在栈上,但是指针指向的内存就不一定咯。