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

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

 

posted @ 2014-11-03 20:21  雄哼哼  阅读(255)  评论(0编辑  收藏  举报