假设我有一个 char 数组,这没关系:
char myChars[100] = "hello";
但如果我有一个
const char* hello="hello";
char myChars[100] = hello;
或者
const char hello[6]="hello";
char myChars[100] = hello;
这不被允许:
error: array must be initialized with a brace-enclosed intializer
在我看来,这些基本上是等效的陈述,为什么会这样?
原文由 jdex 发布,翻译遵循 CC BY-SA 4.0 许可协议
因为指针不是数组,数组也不是指针。
这些例子并不等同;字符串文字
"hello"
不是指针,而是const char[6]
,可用于初始化您的char myChars[100]
作为特殊情况。但是,如果您首先使其衰减为指针,则以后无法再恢复该数组。在一般情况下,编译器无法知道数组有多大,或者它甚至是一个。因此,从指针初始化数组是无效的,无论之前发生了什么。