初始化 char 指针 C

新手上路,请多包涵

这怎么可能?

const char *cp = "Hello world";

我目前正在阅读 C++ 入门,我发现了这个例子(我是一个非常初学者)。

为什么可以用字符串初始化 char 指针?我真的无法理解这个例子,据我所知,指针只能用 & + 指向的对象的地址进行初始化或取消引用,然后分配一些值。

原文由 Federico Nada 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 856
1 个回答

字符串文字 实际上是常量字符数组(带有包含终止符)。

当你这样做

const char *cp = "Hello world";

您使 cp 指向该数组的第一个字符。


更多解释:数组(不仅仅是使用 char 数组的 C 样式字符串,而是所有数组)自然 衰减 为指向其第一个元素的指针。

例子

char array[] = "Hello world";  // An array of 12 characters (including terminator)
char *pointer1 = &array[0];  // Makes pointer1 point to the first element of array
char *pointer2 = array;  // Makes pointer2 point to the first element of array

使用数组与获取指向其第一个元素的指针相同,因此 实际上 涉及到地址运算符 & ,但它是隐含的,并未明确使用。

As some of you might have noted, when cp above I used const char * as the type, and in my array-example with pointer1 and pointer2 我使用了一个非常量的普通 char * 类型。不同之处在于编译器为字符串文字创建的数组在 C++ 中是 _常量_,不能修改。试图这样做会导致 未定义的行为。相比之下,我在后一个示例中创建的数组 不是 恒定的,它是可修改的,因此指向它的指针不必是 const

原文由 Some programmer dude 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏