为什么将数组初始化为空终止符不会导致内存中的每个节都为“空”?
问题描述:
我已经学习在C++中使用的阵列空终止子和我已经困惑,为什么初始化数组的一个空终止不起作用一样它初始化为0。为什么将数组初始化为空终止符不会导致内存中的每个节都为“空”?
例如:
char setOfCharacters [15] = {'\0'};
相比
char setOfCharacters [15] = {0};
我知道初始化setOfCharacters为0意味着,在阵列的每个存储单元保存一个0与开始了。但是为什么当你将一个数组初始化为一个空终止符时不会有相同的工作?
答
事实上该初始化
char setOfCharacters [15] = {0};
相当于
炭setOfCharacters [15] = {(炭)0};
将0设置为char类型的对象也可以使用字符文字'\0'
写入。
而且都初始化
char setOfCharacters [15] = {'\0'};
和
char setOfCharacters [15] = {0};
结果没有明确初始化该阵列的所有其他元素将被初始化为零。
要考虑到比较
'\0' == 0
总会让步true
。此比较中的字符常量被提升为int
(例如,在C中,字符常量的定义类型为int
)。
+0
@Tas我已更新删除单词“也”的短语,使其更清楚。 –
“*但是为什么当你初始化一个数组到空终止符的时候是不一样的?*”谁说它没有? –
然后,两者应该表现相同。你需要一个[mcve]。 – juanchopanza
困惑。在这种情况下,''\ 0''和'0'应该导致相同的结果。演示:https://ideone.com/g5h4DF – user4581301