char *p = hello和char p[ ] = hello

char *p = " hello world "; 和 char p[ ] = " hello world ! ";

所有的字符串常量存放在静态存储区。【字符串常量是贯穿整个程序的生命周期的】,所以1,2只是是否能够访问到的问题,

1.    字符串常量的地址赋值给指针常量,改指针常量指向的字符串的字符不允许修改。不同的字符串指针指向同一个字符串时候,所有的指针指向同一个地址。

2.    将字符串的每个字符赋值给数组,该指针指向数组的首地址,

在 char p [ ] = "heloo "; 中, ” hello “ 是一个字符串常量,存放在静态数据区,但是把一个字符串常量赋值给了一个局部变量(char p [ ] 型数组),该局部变量是存放在栈中的。这样子就有两块内容一样的内存,意思就是说 : char p [ ] = :hello  : 这条语句让 ”hello“ 在内存中有两条拷贝,一份在动态分布的栈中,一份在静态存储区。而char *p = ''hello ''  第二个是指向静态存储区的指针,此变量指向的内存在程序运行中不会被清空。

你可能感兴趣的:(char *p = hello和char p[ ] = hello)