C语言指针指向字符串问题

191 阅读1分钟

先看一下代码,总共有三种字符串声明方式,内容都是“hello world!”。

image.png

接下来看看输出结果: image.png

可以发现,前面两种结果是不同的,第三种不同。(这里一二和三四本质一样,就不重复介绍)这是因为char_one、char_two在创建的时候,分别开辟了对应的空间并且赋值,在执行 char_one == char_two ? "相同" : "不同" 语句的时候,其实是比较这两个数组的首地址,所以不同。

p_char_one(*p_char_one) 和 p_char_two(*p_char_two)为什么会相同呢?

这是因为通过指针指定的字符串,是字符串常量。在执行 char* p_char_one = "hello world!"; 语句的时候,就是创建常量 “hello world!” 并且将这个常量首地址地址赋予p_char_one,随后执行 char* p_char_two = "hello world!"; 语句时,并不会再次创建常量了,而是将原有的常量字符串首地址也给了 p_char_two,导致 p_char_one 和 p_char_two 指向同一个字符串常量地址、*p_char_one 和 *p_char_two 内容一致。

常量字符串:使用 count 修饰,不能修改。