理解c语言中的const指针
Published on June 21, 2024
const指针分为两种情况:
- const 变量类型 * 变量名
- 变量类型 * const 变量名
但是需要理解 const 指针,首先得先弄清楚啥是指针。以 char * s 为例,表示s指向一个字符变量的地址,换个易于理解的方式就是 s 这个变量存储了某个字符变量的地址。 以一个例子为例:
char * s = “hello,world\n”;
其中 s 存储了 "hello,world\n" 这个字符串的首地址,即字符 'h' 的地址。
那么,现在我们理解了指针后,我们可以进行逻辑推导来理解const指针。 我们需要知道 const 限定什么,比方说 const 限定整个创建指针的语句即 变量类型 * 变量名 ,例如 const char * s :
那么我们可以进行以下的推导理解:
\(\because\) char * s = “hello,world\n”
又 \(\because s \rightarrow\) 'h'.
\(\therefore\) const char * s \(\rightarrow\) const 'h'
const 'h' 表示什么意思呢?其实就是说 'h' 不能改变了。所以 const char * s 的意思就是说,s 指向的地址所表示的内容不能改变。但是变量 s 的内容可以发生改变,也就是说 s 可以指向别的地址。 当然了,我现在这样进行逻辑上的推理,只是推理,不是实际编译的情况,也不是合理的语法,只是有助于理解。
现在我们同样按照这个思路分析 变量类型 * const 变量名 。现在我们举个实际的例子:
char * const s = “hello,world\n”;
现在 const 限定 s, 而 s 是什么呢? s 用于保存字面量 "hello,world\n" 中 'h' 的地址,所以现在 s 不能发生改变了,也就是说 s 无法更换存储的内容了,所以 s 被强行锁定了只能指向 'h' 的地址。但是指向的地址所存储的内容却可以发生改变。
最后用图例进一步生动说明:
- const 变量类型 * 变量名 : 地址1234指向的4567地址所在的变量所存储的 'h' 字符不可以发生改动,但是地址1234存储的内容4567可以发生改变
- 变量类型 * const 变量名: 地址1234内存储的4567不能发生任何变化,但是4567这个地址上保存的字符
'h'
可以发生变化

好了今天的 const 指针的内容就分享到这了。非常感谢你的阅读,鄙人才疏学浅,若有错误,请联系我的邮箱。