以前在《C语言程序设计-现代方法》这本书中看到过“永远不会返回指向自动局部变量的指针”这句话,当时并不在意,直到今天面试题中出现了返回局部变量的题后,才引起注意,真可惜!
面试代码如下:
char *test()
{
//char p[]="Hello world";//方式1
char *p="Hello world";//方式2
return p;
}
请问上述两种方式是否有问题?
一开始以为两种方式都存在问题,不能正常返回指针。回来调试后发现,方式1中,以数组的形式分配内存(局部变量),内在会分配到函数栈上,当函数返回时,栈空间也随之释放了,因此无法正确返回指针的内容;方式2中,通过指针分配内存,字符串的内容会放到数据段中,即存放到堆中,因此,即使函数调用结束返回时,指针的内存仍未释放,因此可以正确返回指针的内容。