对指针的一个有关问题

对指针的一个问题
初学MFC,对指针问题有些不清,以下面的例子来说
char   ch[8]   =   "G-virus ";
const   char   *   Pstr   =   ch;
这样我就如书上所说建立了一个指向常量的指针,于是我就输出Pstr,看看具体能看到什么  
cout < <Pstr < <endl;
结果输出的就是 "G-virus ",我不大明白,Pstr不是一个指针么?怎么会输出了字符串?

按理说它的具体的值是不能修改的
也就是  
*Pstr   =   "fadfaf "是非法的
但   Pstr   =   "dfafsfadsf "是可以的

我的理解是:在指向常量的指针中,指针的地址是可以改变的,是不是这样?


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