前言
首先我们要知道const是constant的缩写(意思是:恒定不变的),那么const作为C语言的关键字去修饰一个东西所表示的意思就很好猜测了,基本可以确定:被const修饰的东西都拥有了恒定不变的属性,这是我们可以确定的。
const修饰变量
一般而言,const是用来修饰变量的(像:int型变量,char型变量,float型变量,指针型变量等等)所有种类的变量它都可以修饰,只不过对于指针变量的修饰略微有些不一样罢了。另外,const修饰的东西都能受到强制保护,所以const可以用作预防意外的变动,提高程序的健壮性。
- const修饰内置类型变量
从下面这个案例我们可以知道,当int型变量a被const修饰的时候,再给他重新赋值,编译器将报错:左值指定const对象。(意思是不能再通过用a这个变量名来找到其对应的存储空间内的方法,去改变里面的数据,从而达到从新赋值)。上面这句似乎话里有话,不知道你听出来没,容我买个关子,哈哈,下面const修饰指针会讲到。
- const的常属性
还值得注意的是:const只是赋予变量常属性,本质上其还是变量,并没有变成常量,只是拥有了常量不可变的性质。举个例子就知道了:
我们都知道在创建数组的时候,数组[ ]内必须是常量表达式,而[ ]内放的是const修饰的变量时,编译器报错:应输入常量表达式。从这就可以知道,const修饰的变量a本质上仍然是变量。
- const修饰指针变量
-
话里有话何解?卖个关子,嘻嘻 !
前面讲到被const修饰的变量,就不能再通过给变量名赋值的方法去改变它的内容了;但其实还有另一种方法可以直接无视const的限制改变其内容,该方法就是:通过指针去访问变量的存储空间,从而改变里面的内容。
那么既然被const修饰的变量仍可以通过指针去改变,那这不就出现歧义了嘛?(我使用const的目的就是为了不让它被改变,但搞了半天还是可以被指针改变,这有违设计const的初衷啊),所以为了不让指针可以改变其内容,那就用const来修饰一下指针吧!!! -
const放在左边
const放在指针变量的*
的左边时,例如:const char* p = &num
,修饰的是*p
。也就是说,我们无法通过对指针p的解引用来改变num中的值了。
-
const放在右边
const放在指针变量的*
的右边时,例如:char* const p = &num
,修饰的是p
。也就是说指针p所指向对象无法更改了,只能指向num。
-
const两边都有
const在指针变量的*
的两边都有时时,例如:const char* const p = &num
,这样既修饰的是*p
也修饰了p
。也就是说指针p既不能改变其所指向对象,也不能通过解引用的方法来改变内容。
-
如果这份博客对铁们有所帮助,或能够使你产生共鸣的,请不要吝啬你的点赞和关注哟,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧 >_<…