指针真的是C++中最难的点之一,之前就提到过,多维数组和指针的关系。
现在思考指针和const的关系。
其中第一个点,C++禁止将const的地址赋给非const的指针。
例如 const int a=3;
int *b=&a;
如果进行这种操作,那么就可以通过b来修改a的值,与a是const类型矛盾。
然而,当指针是一级指针时,可以将非const指针赋给const指针(注意与上文的区别)。
例如:int age=39;
int *pd=&age;
const int *pt=pd;
当指针是二级指针时,这种操作不安全但是可以进行。
例如:const int **pp2;
int *p1;
const int n=13;
pp2=&p1;
*pp2=&n;
*p1=10;
从上例可以看出,将非const指针(&p1)赋给了const指针(pp2),在通过将n的地址赋给*pp2,这样就可以通过改变p1来改变n.
实际上这仍然是个一级指针的例子,只是通过了二级指针**pp2来连接p1和n.
因此,仅当只有一层间接关系时(如指针指向基本数据类型),才可以将非const地址或指针赋给const指针。
如果数据类型本身不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。