对 《[求助]*p和p[]的求别》的解答
在C语言区看到这个问题,因为我是新手不能回复,所以我就把我的想法发表在这里,供大家参考:
下面是原题:
[求助]*p和p[]的求别
#include<stdio.h>
char *GetMemory(void)
{
char p[] = "Hello"; //如果把这里换成char *p = "Hello";就可以
return p;
}
int main()
{
char *str = NULL;
str = GetMemory();
printf(str);
}
为什么char p[] 的时候就不行,我看的解释是说在GetMemor定义的为局部变量,返回时p就已经释放,我有点不明白
换成*p为什么就可以了呢?难道那个时候指针p不会被释放吗?
谢谢各位了
解答:
这里如果用char p[] = "Hello"; return p; 那么返回的将是数组p的首地址,而退出Getmemory()后,数组p的空间就会被回收,所以在main()中就无法引用串Hello了。
而用char *p = "Hello";就可以 ,因为这样写内存中实际有两个空间:p有一个空间,常量“Hello”也占一个空间。
return p; 返回的是p的值也就是“Hello”空间的地址,退出后P空间回收了并不影响对“Hello”的引用,因为我们返回的是“Hello”空间的地址。
以上只是我自己的理解,公供参考。