Char数组声明问题

时间:2010-11-08 19:11:13

标签: c arrays char

为什么我可以

char identifier[4] = {'A', 'B', 'C', 'D'};

而不是

char identifier[4];
&identifier = {'A', 'B', 'C', 'D'}; // syntax error : '{'

我为什么要这样做

char identifier[4] = "ABCD"; // ABCD\0, aren't that 5 characters??

而不是

char identifier[4];
&identifier = "ABCD"; // 'char (*)[4]' differs in levels of indirection from 'char [5]'

这是个笑话吗?

3 个答案:

答案 0 :(得分:3)

您只能在声明数组时初始化数组。

对于char identifier[4] = "ABCD",这确实是可能的,但语法用于故意省略尾随的NUL字符。执行char identifier[] = "ABCD"让编译器对字符进行计数并为您添加NUL('\0')。

答案 1 :(得分:2)

Arkku说了什么,但是,你也不能指定某个地址,即&x = ...永远不合法。

答案 2 :(得分:2)

三点:

  • 初始化不是赋值

  • 数组不是第一类,因此无法分配。您必须单独分配元素(或使用strcpy()或memcpy()等函数。

  • 数组的地址由数组名称提供。

在上一个示例中,以下是有效的解决方案:

char identifier[4];
memcpy(identifier, "ABCD", sizeof(identifier) ) ;

你不能在这里使用strcpy(),因为这需要一个包含5个字符的数组来允许nul终止符。有关间接级别的错误消息不是“笑话”,而是您的错误;上述代码identifier中的注释没有&运算符,因为这样会使char**成为char*