const限定符和指针结合起来常见的情况:
const int *a;
int const *a;
这两种写法是一样的, a是一个指向const int型的指针, a所指向的内存单元不可改写, 所以(*a)++是不允许的, 但a可以改写, 所以a++是允许的.
int* const a;
a是一个指向int型的const指针, *a是可以改写的, 但a不允许改写.
int const* const a;
a是一个指向const int型的const指针, 因此*a和a都不允许改写.
指向非const变量的指针或者非const变量的地址可以传给指向const变量的指针, 编译器可以做隐式类型转换, 例如:
char c= 'a';
const char *pc=&c;
但是, 指向const变量的指针或者const变量的地址不可以传给指向非const变量的指针, 以免透过后者意外改写了前者所指向的内存单元, 例如对下面的代码编译器会报警告:
const char c= 'a';
char *pc=&c;