这怎么可能?
const char *cp = "Hello world";
我目前正在阅读 C++ 入门,我发现了这个例子(我是一个非常初学者)。
为什么可以用字符串初始化 char 指针?我真的无法理解这个例子,据我所知,指针只能用 & + 指向的对象的地址进行初始化或取消引用,然后分配一些值。
原文由 Federico Nada 发布,翻译遵循 CC BY-SA 4.0 许可协议
这怎么可能?
const char *cp = "Hello world";
我目前正在阅读 C++ 入门,我发现了这个例子(我是一个非常初学者)。
为什么可以用字符串初始化 char 指针?我真的无法理解这个例子,据我所知,指针只能用 & + 指向的对象的地址进行初始化或取消引用,然后分配一些值。
原文由 Federico Nada 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.8k 阅读✓ 已解决
2 回答3.7k 阅读✓ 已解决
2 回答3k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
3 回答3.3k 阅读
1 回答3.1k 阅读
字符串文字 实际上是常量字符数组(带有包含终止符)。
当你这样做
您使
cp
指向该数组的第一个字符。更多解释:数组(不仅仅是使用
char
数组的 C 样式字符串,而是所有数组)自然 衰减 为指向其第一个元素的指针。例子
使用数组与获取指向其第一个元素的指针相同,因此 实际上 涉及到地址运算符
&
,但它是隐含的,并未明确使用。As some of you might have noted, when
cp
above I usedconst char *
as the type, and in my array-example withpointer1
andpointer2
我使用了一个非常量的普通char *
类型。不同之处在于编译器为字符串文字创建的数组在 C++ 中是 _常量_,不能修改。试图这样做会导致 未定义的行为。相比之下,我在后一个示例中创建的数组 不是 恒定的,它是可修改的,因此指向它的指针不必是const
。