熬夜发一道难题 哪位高手能解释的了

熬夜发一道难题 谁能解释的了?
我这样写:
char const **p3;
char *p2;
char c1='c';
p3=&p2;// 报错:error C2440: '=' : cannot convert from 'char ** ' to 'const char ** '
p2=&c1;
从错误描述上看,p3是const char **,不能转换为char **

但是,这样的写法:
const char *p1;
char c1='c';
p1=&c1;
却没有错,为什么char*可以转换为const char*,但是char**不可以转换为const char **??

我知道,所谓的const char *p1指的是*p1不可直接变,但是p1可变,所以p1可以指定&c1;
但是再加一级的时候,怎么就出错了?按照我的推论,char const **p3;的意思是,p3可变,*p3也可变,但是**p3不可直接变。
谁能解答,为什么编译出错?我用的vc6.0
能解释清楚的,我把20分全部奉送

------解决方案--------------------
探讨
C/C++ code


const char **p //指向的指针指向的内容不能变,且指向的指计也不能变
char const **p //同上