高级语言中的关键字:const用法分析

  const是constant的缩写,本意是“不变的、不易改变的”,它属于c、c++、Java等高级语言中的关键字,通常用来修饰变量对象、函数参数、c或c++指针对象使用。

 const在实际编程中起着至关重要的作用,本文主要讲解它在编程中的不同含义。


章节预览:


1. 变量修饰
2. 指针修饰

章节内容:


1. 变量修饰

  【例1】 int const a;

      示例代码

          int const a = 5;
          int b = a; //正确
          b = 6; //正确
          a = 6; //错误
          const int *p = &a; //正确
          *p = 6; //错误
          p = 0; //正确


      示例分析

  • 定义一个int类型常量a,a的值为5;
  • 定义一个int类型b,b初始化赋值为a;
  • b赋值为6;
  • a赋值出错,a的值不允许修改;
  • 定义一个int类型常量指针p,并指向常量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋空地址,a的地址不变。

      示例概况

  • 定义(类型 + const + 对象)形式,必须初始化赋值;
  • 对象在生命周期内不允许赋值,即对象值不允许修改;

      示例相似情况

  • (int const a)、(const int a)都属于常量对象,所表达的含义相同。

2. 指针修饰

  【例2】 const int *p;

      示例代码

          const int *p;
          int a = 5, b = 6;
          p = &a; //正确
          *p = 6; //错误
          p = &b; //正确
          *p = 7; //错误


      示例分析

  • 定义一个常量int类型指针p;
  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • p地址赋变量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋变量b的地址;
  • p指向的内存赋值出错,b的值不允许修改;

      示例概况

  • 定义(const + 类型 + *(*在定义处表示指针声明,*的数量表示指针的维数) + 对象)形式,允许不进行初始化赋值;
  • 指针对象在生命周期内允许赋地址,即对象地址允许修改;
  • 指针对象在生命周期内不允许赋值,即对象值不允许修改;

      示例相似情况

  • (const int *p)、(int const *p) 、(const int const *p)都属于常量指针,所表达的含义相同。

  【例3】 int * const p;

      示例代码

          int a = 5, b = 6;
          int * const p = &a;
          *p = 6; //正确
          p = &b; //错误


      示例分析

  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • 定义一个int类型指针常量p,并指向变量a的地址;
  • p指向的内存赋值为6,即a的值为6;
  • p地址赋变量b的地址出错,p的地址不允许修改;

      示例概况

  • 定义(类型 + * + const + 对象)形式,必须初始化赋值;
  • 指针对象在生命周期内允许赋值,即对象值允许修改;
  • 指针对象在生命周期内不允许赋地址,即对象地址不允许修改;

      示例相似情况

  • (int * const p)属于指针常量,只有这一种定义形式。

 【例4】 const int * const p;


      示例代码

          int a = 5, b = 6;
          const int * const p = &a;
          *p = 6; //错误
          p = &b; //错误


      示例分析

  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • 定义一个常量int类型指针常量p,并指向变量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋变量b的地址出错,p的地址不允许修改;

      示例概况

  • 定义(const + 类型 + * + const + 对象)形式,必须初始化赋值;
  • 指针对象在生命周期内不允许赋值,即对象值不允许修改;
  • 指针对象在生命周期内不允许赋地址,即对象地址不允许修改;

      示例相似情况

  • (const int * const p)、(int const * const p)、(const int const * const p) 都属于常量指针常量,所表达的含义相同。

      本节概况

  • 指针常量:指针地址不允许修改,但指针指向的内存值允许修改;
  • 常量指针:指针地址允许修改,但指针指向的内存值不允许修改;
  • 常量指针常量:指针地址和指针指向的内存值都不允许修改。

猜你喜欢

转载自blog.csdn.net/a29562268/article/details/105877234