const和指针

指针真的是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指针。 

发布了15 篇原创文章 · 获赞 4 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览