指向常量的指针:此指针指向一个内存区域,这个内存区域(编译期)只读,即是此指针指向的内存区域中的值不能改变。
指针常量:此指针是一个常量,即是无法改变指针的值,如果已经保存了内存单元A 的地址,则用内存单元B 的地址赋值给它将不能通过编译。
#include <stdint.h>
int x = 328;
int y = 222;
// a pointer point to a read-only memory x
const uint32_t * after = & x;
// a read-only pointer
uint32_t * const pre = & y;
int main (int argc, char** argv) {
after = & y;
pre = &x ; // error
*after += 20; // error
*pre += 30;
return 0;
}
以上代码中: after 即是一个指针,它的指向位置可以改变,即它不是一个只读的指针,但其指向的内总x ,是只读的,所以 * after += 20; 在编译期会报错。
pre 是一个只读的指针,即它不能改变指向的位置,但其指向的内存区中的值可以改变。所以 pre = & x; 在编译期报错。