1.限制指针变量本身 int main() { int a = 0; int b = 1; int *const p = &a;//限制指针变量本身,即指针变量不可改变,也就是说指针指向不可改变,所以在定义时必须初始化 p = &b;//错误 *p = 1;//ok return 0; } 2.限制指针变量指向的数据 int main() { int a = 0; int b = 1; const int *p = &a;//等价于int const *p = &a,限制指针变量所指的数据,即数据不可以被改变,但指针变量本身可以改变 *p = 1;//error p = &b;//ok return 0; } 3.同时修饰 int main() { int a = 0; int b = 1; const int *const p = &a; p = &b;//error; *p = 1;//error return 0; } 4.指向普通变量与常变量的区别 int main() { int a = 0; const int b = 1; int *p = &a;//ok int *pb = &b;//error const int *pc = &b;//ok int *pd = (int *)&b;//ok return 0; }