Fork me on GitHub

char p[]与char *p的区别

如下程序:

char* GetMemory1()
{
char p[] = "Hello,World";
return p;
}

char* GetMemory2()
{
char *p = "Hello,World";
return p;
}

int main()
{
char *q,*r;
q = GetMemory1();

r = GetMemory2();

cout<<q<<endl;

cout<<r<<endl;
return 0;
}

其运行结果是什么?

答:乱码和"hello word",因为第一个函数的字符数组是动态变量,离开函数就会失效,所以虽然正确返回了该字符串的地址,但是该地址已经被释放,内容可能已经被修改了,所以是乱码(有些编译器下仍可以正确显示,但在VC6.0下为乱码),另外,对字符数组改为"static"类型就可以正确显示了。

第二个函数,是"Hello,World"是字面值常量,char* p指向她,所以不能改变她,会转化为const char* p,同时正确返回该字面值常量的地址,可以正确显示。

posted on 2012-09-14 10:39  loopever  阅读(393)  评论(0编辑  收藏  举报