const int a = 10; //编译可通过,和int const a = 10; 表达的效果是一样的 a = 20; //编译不通过 const int a; //编译不通过,必须初始化 //指针常量,指向不能修改,指向的内存中的值可以修改,相当于数组名; int b = 100; int *const p; //编译报错,必须初始化 int *const p = &b; //编译通过 int *const p = &a; //编译不通过,因为a是常量 //常量指针,指针指向可以修改,但指向的值不能修改,此时该指针也叫只读指针 int const *p; //编译能通过,只是p为野指针 int const *p = &a; //编译可通过 int const *p = &b; //编译可通过 *p = 200; //不管p指向a还是b,编译都不会通过 //常量指针常量 const int *const pp; //编译不通过,必须初始化 const int *const pp = &a; //编译通过 const int *const pp = &b; //编译通过,此时b可以改变值,而且pp指向的值同步改变,但不能通过pp修改b的值