我有点困惑。这些代码之间的逻辑区别是什么?
#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
我有点困惑。这些代码之间的逻辑区别是什么?
#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
char a[5]={"ABCD"};
char a[5]={'A','B','C','D','\0'};
在这两种情况下,字符数组a都声明为大小为 5 个 char 类型的元素:组成单词"ABCD"的 4 个字符,加上最后一个空字符('\0'),它指定了序列,在第二种情况下,当使用双引号(“)时,它会自动附加。注意用逗号添加空字符。用双引号(“”)括起来的一系列字符称为字符串常量。C编译器可以'\0'
在字符串常量的末尾自动添加一个空字符来表示字符串的结束。
来源:此链接可以更好地帮助您
前两个只是将char[5]
源分配给char[5]
具有不同语法的数组。(5 是四个字母加上一个空终止符)
最后一个也会做同样的事情,但它没有明确指定空终止符。由于您分配给 a char[5]
,最后一个仍将零填充剩余空间,有效地添加一个空终止符并执行相同的操作,但如果您分配给 a ,最后一个不会引发编译器错误char[4]
;它只会给你留下一个未终止的字符数组。