C语言返回一个指针的问题
刚学C语言不久,看一些函数返回值很不解,例:
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘/0’ )
NULL ;
return address ;
}
返回一个指针,这个指针是个局部变量,函数结束后指向的空间释放掉了,指向的内容也应该不是想要的内容了,很不理解?
看一些其他的函数也有类似的实现,想不明白,请各位高手指点一下,谢谢!
[解决办法]
address 是局部变量,但是它指向的内存却不是局部的,
看这句 char *address = strDest;
函数结束后只是address释放了(在栈中),但是它指向的内存还是存在的,所以返回 address并没有错
[解决办法]
其实return就是拷贝了一次,临时对象,~这里即是拷贝了一份指针变量,而且外部调用该函数进行赋值操作,一般进行拷贝构造。而返回的方式得看编译器了。可以研究下栈针结构和实现
[解决办法]