为什么说const是变量守护者?
首先我们先从字面认识一下const:
作用如其意,const用于修饰变量,将其变为某种意义上的“常量”。我们知道,常量是不可以被赋值的,所以被const修饰的常量就这样被保护起来了:
可它真能任何时候都保护变量吗?
我们看下面一段代码:
num被篡改了!
所以我们可以比喻一下:假设我们把num放在一间屋子里,想要修改它就要进入这间屋子,而const的作用就是关上了屋子的门。我们不能直接通过门进入屋子,也就是不能直接通过给num赋值来修改它。而通过指针解引用找到它的地址,诶!我们没有从正门进入,直接从屋顶空降!所以const只是不能直接修改变量,但可以通过指针解引用找到它的地址来修改它。
const只能保护常规变量吗?
众所周知,指针变量也是变量啊,所以我们可不可以用const修饰指针变量呢?
显然也是可以的。但是,同上面一样,我可以定义一个二级指针,通过对二级指针两次解引用来找到num并修改它!
上面只是把const放在了“*”的左边,那如果把它放在右边会怎样呢?
其实很好理解,p是指针变量,*p则是表示指针指向的内容。当const修饰p时,p就不能被改变;当const修饰*p时,*p指向的内容就不能被改变。
在写代码的过程中,const大多是用在函数传参的时候,用来保护传过去的参数不被改变。