我有点困惑。这些代码在逻辑上有什么区别?
#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'};
'\0'
以表示字符串的结尾。NULL
。 - NewCoder前两个是将char[5]
源分配给一个具有不同语法的char[5]
数组。(5是四个字母加上一个空终止符)
最后一个也会做同样的事情,但它没有明确指定空终止符。由于你正在分配给一个char[5]
,最后一个仍然会用零填充剩余的空间,有效地添加一个空终止符并起到相同的作用,但如果你分配给一个char[4]
,最后一个不会抛出编译器错误;它只会留下一个未终止的字符数组。
char a[5]={'A','B','C','D'}
中不添加0?这也是错误的问题:编译器确实会添加它。抱歉使用了这个比喻,希望现在清楚了。 - anatolyg