初学MFC,对指针问题有些不清,以下面的例子来说
char ch[8] = "G-virus";
const char * Pstr = ch;
这样我就如书上所说建立了一个指向常量的指针,于是我就输出Pstr,看看具体能看到什么
cout<<Pstr<<endl;
结果输出的就是"G-virus",我不大明白,Pstr不是一个指针么?怎么会输出了字符串?按理说它的具体的值是不能修改的
也就是
*Pstr = "fadfaf"是非法的
但 Pstr = "dfafsfadsf"是可以的我的理解是:在指向常量的指针中,指针的地址是可以改变的,是不是这样?
char ch[8] = "G-virus";
const char * Pstr = ch;
这样我就如书上所说建立了一个指向常量的指针,于是我就输出Pstr,看看具体能看到什么
cout<<Pstr<<endl;
结果输出的就是"G-virus",我不大明白,Pstr不是一个指针么?怎么会输出了字符串?按理说它的具体的值是不能修改的
也就是
*Pstr = "fadfaf"是非法的
但 Pstr = "dfafsfadsf"是可以的我的理解是:在指向常量的指针中,指针的地址是可以改变的,是不是这样?
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分
const char * Pstr = ch;
Pstr = "dfafsfadsf";已测试Pstr = "dfafsfadsf";是编译不过的。
谣言惑众
呵呵 ,开个玩笑。。我测试了你贴的代码。通过了 VC6.0的编译, 因为你的质疑,我花时间测试了我说的const3种类型,结果和我说的一样。我没错
呵呵,也许是编译器版本问题吧。或者你只是看见了出错,而没细看是什么错。
l-value is const object,这个是常量被赋值的错误信息。我说的那3个const写法的理解也是在正规书上看的。。