初学MFC,对指针问题有些不清,以下面的例子来说
char ch[8] = "G-virus";
const char * Pstr = ch;
这样我就如书上所说建立了一个指向常量的指针,于是我就输出Pstr,看看具体能看到什么 
cout<<Pstr<<endl;
结果输出的就是"G-virus",我不大明白,Pstr不是一个指针么?怎么会输出了字符串?按理说它的具体的值是不能修改的
也就是 
*Pstr = "fadfaf"是非法的
但 Pstr = "dfafsfadsf"是可以的我的理解是:在指向常量的指针中,指针的地址是可以改变的,是不是这样?

解决方案 »

  1.   

    Pstr是一个指向字符串的char*指针,所以cout就输出字符串,很对。
      

  2.   

    你的理解没错。
    const的有3种写法。
    const char *pstr;  char const * pstr ; char * const pstr;  
    前面两种功能一样。声明了一个 常量字符串 的指针,   第3个声明了一个指向char的 常量指针。 第3个可以满足不可更改的需求。(学习记忆,未编程验证) 
     
    至于cout输出了整个字符串,这个是cout自身的实现问题,当你传一个字符给cout 它就给你输出,当你传一个字符指针给它, 它就输出后续所有字符,直到碰上字符串结束符 '\0';
    看下面的代码:
    char u='o';
    char *p=&u;
    cout<<p<<endl;
    这里cout输出了o然后一堆乱码。。你的问题:
    结果输出的就是"G-virus",我不大明白,Pstr不是一个指针么?怎么会输出了字符串?所以说:字符指针就是字符串的象征。这类指针就应该做为字符串处理,因为c\c++没把字符串做基本类型,而它又太常用了。10分
      

  3.   

    char ch[8] = "G-virus";
    const char * Pstr = ch;
    Pstr = "dfafsfadsf";已测试Pstr = "dfafsfadsf";是编译不过的。
      

  4.   

    lyg_zy(学无止境,宁静致远)   
      谣言惑众
    呵呵 ,开个玩笑。。我测试了你贴的代码。通过了 VC6.0的编译, 因为你的质疑,我花时间测试了我说的const3种类型,结果和我说的一样。我没错
    呵呵,也许是编译器版本问题吧。或者你只是看见了出错,而没细看是什么错。
    l-value is const object,这个是常量被赋值的错误信息。我说的那3个const写法的理解也是在正规书上看的。。
      

  5.   

    我想您可能对C或C++还不是很熟,在C或C++中是没有字符串变量的,他们用字符数组来表示字符串,指针与数组又有什么关系呢,数组名字其实就是一个指针,比如:char a[10];a就是一个数组名,他其实就是一个指针,因为指针就是一个存放地针的变量,数组名就表示一个地址。