char a[]="Bye!";
char b[]={'B','y','e','!'};
cout<<sizeof(a)<<" "<<sizeof(b)<<endl;
/*
5 4
*/
对于第一个数组one[],它是一个字符串常量,以null字符'\0'结尾,编译器会自动在末尾添加一个null字符。因此,one[]的sizeof值为5,即字符串长度加上null字符的长度。
对于第二个数组two[],它是一个字符数组,其中包含了4个字符,没有null字符。因此,two[]的sizeof值为4,即它的元素个数。
同样,
char a[5] = "abcde"; //会报错
char b[5] = { 'a','b','c','d','e' };//没问题
因为a是个字符串常量,所以在5个字符的内存中,必须有一位是'\0',因此只能存储到"abcd"四个字母。
而b是一个字符数组,可以五个全存满。