目录
1. 了解 const
const是一个C语言的关键字,它限定一个变量不允许被改变。
2. const 修饰变量
上述代码中,变量a 被 const 修饰,在语法上加了限制,只要对 a 进行修改,就不符合语法规则,编译器就会报错。经 const 修饰的 a 具有了常属性,即不能被修改,但其实 a 本质上仍是变量,而不是常量,被称为常变量。
创建数组时,必须用常量值来指定数组的大小。上述代码运行时报错就说明被 const 修饰的 a 本质上仍是变量。
注意:以上操作是在C语言的环境下进行的。在C++中,const 修饰的变量就是常量!
前面提到经 const 修饰的变量是不能修改的,指的是不能直接修改。若非要修改,也不是不可,通过指针的解引用运算即可修改。虽然这么做是在破环语法规则。
3. const 修饰指针变量
3.1 const 放在 * 的右边(右定向)
上图中,指针变量p 的值不能由 变量a 的地址修改为 b 的地址。
上面两张图说明了如果 const 放在 * 的右边,就不能修改指针本身的内容。
上图中,变量a 的值由10变成了100。这说明了如果 const 放在 * 的右边,可以通过指针改变指针指向的内容。
const 修饰指针变量的时候,const 如果放在 * 的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
3.2 const 放在 * 的左边(左定值)
上图中,指针变量p 指向的内容(即变量a 的值)不能由10修改为100。
上面两张图说明了如果 const 放在 * 的左边,就不能通过指针的解引用运算去修改指针指向的内容。
上图中,指针变量p 本身的内容由 a 的地址变成了 b 的地址。这说明了如果 const 放在 * 的左边,指针变量本身的内容可以修改。
const 修饰指针变量的时候,const 如果放在 * 的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变,但是指针变量本身的内容可变。
3.3 const 放在 * 的两边(定向又定值)
const 修饰指针变量的时候,如果 const 放在 * 的两边,则指针本身的内容和指针指向的内容都不能修改。