首页 > 代码库 > 关于字符指针和字符数组初始化的问题

关于字符指针和字符数组初始化的问题

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="!";//指向了另外一块常量区内存

 

关于字符指针和字符数组初始化的问题