用引号和花括号初始化char数组

时间:2015-06-04 17:30:34

标签: c++ arrays initializing

我有点困惑。这些代码之间的逻辑差异是什么?

#include <iostream>
using namespace std;
int main(){
    char a[5]="ABCD"; // this
    cout << a;
    return 0;
}

第二是

char a[5]={"ABCD"}; // this

第三是

char a[5]={'A','B','C','D'}; // this

2 个答案:

答案 0 :(得分:4)

char a[5]={"ABCD"};
char a[5]={'A','B','C','D','\0'};

在这两种情况下,字符数组 a 的声明大小为5个char类型的元素:构成单词&#34; ABCD&#34;的4个字符/ strong>,加上最后一个空字符(&#39; \ 0&#39;),它指定序列的结束,在第二种情况下,指定使用双引号(&# 34;)它会自动附加。注意通过逗号添加空字符分隔。用双引号括起来的一系列字符(&#34;&#34;)称为字符串常量。 C编译器可以在字符串常量的末尾自动添加空字符'\0',以指示字符串的结尾。

来源:This link可以帮助您更好地

答案 1 :(得分:0)

前两个是将char[5]源分配给char[5]数组,仅使用不同的语法。 (5是四个字母加上一个空终止符)

最后一个也将执行相同操作,但它没有显式指定空终止符。由于您要分配给char[5],最后一个仍将零填充剩余空间,有效地添加一个空终止符并执行相同的操作,但如果您分配给{,则最后一个不会抛出编译器错误{1}};它只会让你留下未经确定的一系列角色。