关于指针常量和常量指针,我认为这篇文章已经写的很好了Link,我想要补充的是在牛客网上遇到的一个题,已知下面语句,
int x=5;
const int *const p=&x;
const int &q=x;
int const *next=&x;
const int *j=&x;
则下面四个选项中,语法存在错误的是()
A. *p=1;
B. q++
C. next++
D.(*j)++
你可先自己给出答案,再看看下面我的解释.
/
/
/
/
/
/
/
/
/
/
/
/
/
/
答案是ABD,
const int *const p=&x; //这两条语句等价,为指向常量的指针常量
const int &q=x; //这是因为引用的本质在C++内部是一个指针常量
故A选项中的*p和B选项中的q均不能改变.
int const *next=&x; //这两条语句等价,为常量指针
const int *j=&x; //故指针可以改变,指向的位置上的值不可改变
故D选项错误,C选项虽然语法没有错误,但是next++指向了一块未知的位置,这样在编程中是有问题的.此处知识点,<<C和指针(第二版)>>有介绍