一、对于 const 关键字我在这里说一下在 c 语言中的使用

 

  1. 第一个需要理解的是const修饰的是变量
  2. 修饰变量的目的是为了使得该变量只读

 

二、为什么要使用 const 关键字

  1. 方便代码阅读,清楚的告诉其他人程序哪些变量是不可以被修改的
  2. 同时也可以方便自己代码的书写,因为写的代码量过大,一些变量你不希望被修改而在代码书写过程你忘记了,const 可以有效的指出你的错误。

 

一个关键的理解:const 修饰变量只是通过当前变量无法去修改你定义的变量,而 c 语言的很重要的一个知识点就是地址,有了地址,const 类型也可以被修改,不过编译器一般会有警告。

 

看以下代码:

 

const int i = 5;

printf("i = %d\n", i);

int *p = &i;

*p = 10;

printf("i = %d\n", i);

编译器警告:initialization discards ‘const’ qualifier from pointer target type

意思是 p 修改了 i 的const特性(这样你就会发现程序错误),也可以理解为类型不匹配

I 是const int类型的,而 *p 是int 型,那么可以这么改 int const *p = &i;

这也是一个很大的逻辑谬误:你要变量只读,你又千方百计的想去改变的,典型吃饱了撑的。

 

 

  • 常见的 const 修饰

const int a = 10;                 // 定义变量a,一般const类型只有在初始化的时候

// 因为变量已经只读,原则上来说后续是无法修改的

// 前提是你不挑事

const int *p = &a;//int const *p = &a;  // 定义指针指向的变量只读,也就是变量 a 只读,

                              // 变量 a 无法通过指针 p 去修改

int *const *p;                   // 修饰二级指针,二级指针p 指向的内容无法改变,即

                              // *p 无法被修改

int * const p;                   // 修饰指针,p是常量,p的地址无法被改变

 

  • 理解const 精髓

const 离那种类型的近修饰那种类型。离 *p 近,*p 就无法改变,离 int 近,int 对应的变量就无法改变。  

10-05 13:26