char arr[] 和 char *arr区别

来源:互联网 发布:赫苏斯 数据 编辑:程序博客网 时间:2024/05/29 02:27
char arr[] = "hello world";//arr为数组的名称,数组中的内容在栈中,离开数组所在的作用域,所占用的空间就被释放。char *arr = "hello world";//arr为指针,arr占用的内存为栈中的内存,但其指向的内存在静态存储区,静态存储区的空间在程序结束的时候,才被释放。下面是一个小的程序,GetString01() 和GetString02()函数。GetString01()函数,当返回数组的名称时,数组的内容就被释放了。GetString02()函数,当返回指针时,指针所指的内容没有被释放。所以,GetString02()函数可以正确的返回内容,GetString01()返回的是乱码。
#include<iostream>#include<string>using namespace std;char * GetString01(){char arr[] = "hello world";return arr;}char * GetString02(){char *arr = "hello world";return arr;}int main(){char *p = GetString01();cout<<p<<endl;char *q = GetString02();cout<<q<<endl;system("pause");    return 0;}
结果的截图如下:

0 0