const修饰指针有三种情况:

  • const修饰指针 — 常量指针
    • const int * p = &a;
    • 特点:指针指向可以修改,但是指针指向的值不可以改
  • const修饰常量 — 指针常量
    • int * const p = &a;
    • 特点:指针的指向不可以改,指针指向的值可以改
  • const既修饰指针,又修饰常量
    • const int * const p = &a;
    • 特点:指针的指向和指针指向的值都不可以改
    • *p = 20; //错误
    • p = &b; // 错误
  1. #include <iostream>
  2. using namespace std;
  3. int main(void) {
  4. //1.const修饰指针
  5. int a = 10;
  6. int b = 10;
  7. const int* p = &a;
  8. // 指针指向的值不可以修改,指针的指向可以修改
  9. //*p = 20;错误
  10. p = &b; // 正确
  11. //2.const修饰常量
  12. //指针的指向不可以改,指针指向的值可以改
  13. int* const p2 = &a;
  14. *p2 = 100;// 正确
  15. //p2 = &b; // 错误,指针的指向不可以改
  16. //3.const修饰指针和常量
  17. const int* const p3 = &a;
  18. //指针的指向和指针指向的值都不可以改
  19. //p3 = 100; // 错误
  20. //*p3 = &b; // 错误
  21. return 0;
  22. }

技巧:

  • 看const右侧紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量。