这可以说是C和C++中很基础的知识了,却也是很容易出错的知识,对于定义常量,没有什么特别,但是对于定义常量指针,没犯过错误的人估计很少。
众所周知,被const修饰过的符号的值是无法改变的,被称为常量,比如“const int a = 50;”,但还有一种写法是“int const a = 50;”,const的位置不同了,实际上,这两条语句的意义是一样的,都是将a定义为整型常量。但若将其用于指针中,const的位置不同,意义也就不同。
如const int *pa与int* const pa,具体看示例。
int main(int argc, char *argv[])
{
const int a;
int b;
const int *pa = &a;
pa = &b; //正确写法,const int *pa可以修改pa的值,但是无法修改*pa的值
*pa = 70; //错误,const int *pa指向const int类型,无法修改*pa的值
b = 70;
printf("%d", *pa); //打印70,*pa无法修改,但是b可以修改,虽说指向同一内存地址,但是访问形式不同
int* const pb; //错误,常量指针没有初始化
int* const pb = &a; //正确
pb = &b; //错误,常量指针的值无法修改
*pb = 20; //正确,虽说a是常量,但*pb不是常量,如果以后想强行修改某常量的值,可以效仿此法
const int* const pc = &b; //不常见的写法,不过这种写法是正确的,从上面的几条注释就可以猜出来了,const int* const pc不可以修改*pc的值,也不可以修改pc的值
reuturn 0;
}
转载于:https://www.cnblogs.com/simbon/archive/2012/03/26/2418521.html