在创建char数组时如果用字符串创建和不使用字符串创建sizeof函数竟然有不同的答案。
在学习c++过程中碰见个这个问题十分有趣,边想着记录下来。
char charArray1[] = "abcd";
cout << "\"abcd\" string字符串的长度:" << sizeof(charArray1) << endl;
char charArray2[] = {'a','b','c','d'};
cout << "abcd char数组的长度:" << sizeof(charArray2) << endl;
结果:
之后我又看了看 charArray1[4]到底是什么,结果打印的时候没打印出来,然后又强转成int型看的(其实就是asllc码)
cout << "charArray1[4]:" << (int)charArray1[4] << endl;
结果为0,根据ascll码看出来如果是字符(char)型式打印出来就是空
之后我又把字符数组的结尾标志打印了一下发现,两者竟然相同
// "\\0:" 转义一下才能打印出来 \
cout << "\\0:" << (int)'\0' << endl;
结论:如果利用字符串创建字符数组的话,字符串结尾的'\0'也会添加到字符数组里面,之后字符数组结尾再次补一个'\0'
也就是说用字符串创建的数组全部内容是
char charArray[] = "abcd";
char charArray[] = {'a','b','c','d','\0'};
在编译阶段会变成
'a','b','c','d','\0','\0'
而sizeof函数会把'\0'算进去并减去一个'\0'