4

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

#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
4

2 回答 2

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

在这两种情况下,字符数组a都声明为大小为 5 个 char 类型的元素:组成单词"ABCD"的 4 个字符,加上最后一个空字符('\0'),它指定了序列,在第二种情况下,当使用双引号(“)时,它会自动附加。注意用逗号添加空字符。用双引号(“”)括起来的一系列字符称为字符串常量。C编译器可以'\0'在字符串常量的末尾自动添加一个空字符来表示字符串的结束。

来源:此链接可以更好地帮助您

于 2015-06-04T17:40:02.927 回答
0

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

最后一个也会做同样的事情,但它没有明确指定空终止符。由于您分配给 a char[5],最后一个仍将零填充剩余空间,有效地添加一个空终止符并执行相同的操作,但如果您分配给 a ,最后一个不会引发编译器错误char[4];它只会给你留下一个未终止的字符数组。

于 2015-06-04T17:44:17.227 回答