关于字符指针和字符数组初始化的问题
int main() { char a[6]="hello"; char b[6]="hello"; char* c="hello"; char* d="hello"; //*(c+1)='!';出错 if(a==b) cout<<"1"<<endl; if(c==d) cout<<"2"<<endl; return 0; }
该题输出的是2.
原因:a和b之所以不相等,因为他们的内存是在运行时栈上分布的,也就是说可以随机访问并且更改他们自己的数组空间。
而c和d的初始化的空间分配,是在编译的时候就分配好了,"hello”放在了常量区,而栈上的c和d这两个字符指针,只是指向了这块固定的常量区,由于是放在常量区的,所以指针所指向的内容也就是不能修改的,但是修改指针的指向是可以的。如下:
*(c+1)='!';//出错 c="!";//指向了另外一块常量区内存