char p[]="hello":
- p[]是一个字符串数组,编译器在栈上给p[]分配6字节的空间,6字节中依次存储'h','e','l','l','o','\0'。
- 但不存在p指针本身的存储。p是一个数组内存块的名字。
- 字符串是可以修改的。
char *p="hello" :
- p是指向一个常量字符串的指针 ,编译器在栈上给p分配4字节(如果是32位),而字符串"hello"存放在静态存储区。
- 字符串是不能修改的。
下面的例子:
#include<iostream>
using namespace std;
int main() {
char p[]="hello";
char *q="hello";
p[1]='x';
//q[1]='x';
cout<<p<<endl;
cout<<q<<endl;
cout<<(void *)p<<endl;
cout<<(void *)q<<endl;
}