在C语言的王国里,const这个小玩意儿,就像是一个守卫,手里总拿着“不可更改”的标志。
它最常见的工作,就是给变量贴上“别碰我,我是常量”的标签,告诉大家这是一个常量。
但是,这个守卫有时也会到指针面前指手画脚,告诉它们哪些东西能变,哪些东西不能变。
而且这事儿不简单,要是没弄清规则,指针们很可能就会搞错自己的做法。下面,咱们就一起来看看。
1 指针指向常量内容
const int *ptr;
int const *ptr;
这两行代码本质上一模一样。
这里的const,说明ptr所指向的内容不可变。就像是给指针ptr戴上了一副“只读眼镜”。这意味着,通过ptr,你只能读取它指向的值,却不能改变它。好比去博物馆里欣赏展品,但不能触碰它们。
所以,如果你的代码里有这样一行,记得,你只能做个安静的观察者。
2 指针指向的地址不变,但内容可变
int * const ptr;
这里的const,限定指针指向的地址不变,但内容可变。
就像是给指针ptr的脚上装了一个“固定装置”。这意味着,一旦ptr指向了一个地址,它就不能指向另一个地址了。但是,你可以改变那个地址里的内容。
好比你有一个固定的停车位,你可以在车里放任何你想要的东西,但你不能把车停在别的地方。
3 函数中的常量指针参数
bool fun(int* const ptr){
}
在这个函数中,const限定了,不能更改ptr指向的内存区域的值。
就像是给参数ptr的“修改权”上了一把锁。当你把一个指针传递给这个函数时,函数内部不能改变ptr指向的内存区域的值。
好比你把一本书借给朋友,但告诉他只能读,不能在上面做笔记。
记忆小贴士
常量在左,内容不变:如果const在星号
*
的左边,那么指针指向的内容是不可变的。
常量在右,指针不变:如果const在星号*
的右边,那么指针本身是不可变的,但指向的内容可以变。
记住和理解这些规则,你就可以在C语言的指针游戏中,又提升一个段位了。