数组中0和'0'之间的差异

时间:2015-10-03 03:28:43

标签: c++ literals

我有关于数组初始化的问题

之间有什么区别

char a [6] = {0};

char a [6] = {'0','0','0','0','0','0'};

编译器如何解释上述两个表达式?它们是否相同?

2 个答案:

答案 0 :(得分:3)

'0'是数字0的ASCII字符。其值为48。

常量0零字节空字节,也写为'\0'

这四个是等价的:

char a[6] = {0};
char a[6] = {0, 0, 0, 0, 0, 0};
char a[6] = {'\0', '\0', '\0', '\0', '\0', '\0'};
char a[6] = "\0\0\0\0\0"; // sixth null byte added automatically by the compiler

答案 1 :(得分:1)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 是显示的字符(例如在屏幕上),因此它看起来像零。在所有标准字符集中,它具有非零数字值。例如,在ASCII字符集中,它具有数值<script type="text/javascript" src="WPKEY/106website/jquery-1.11.3.min.js"></script>

'0'是一个产生数值为零的文字。 48是一个文字,它给出一个数字值为零的字符。

将值放入数组不会改变这一点。

您可以使用类似

的方法对此进行测试
0

总会打印出来

'\0'

某些编译器可能会对上述代码发出警告,因为#include <iostream> int main() { std::cout << "Character \'0\' does " if (0 != '0') std::cout << "not "; std::cout << "have numeric value zero\n"; std::cout << "Character \'\\0\' does " if (0 != '\0') std::cout << "not "; std::cout << "have numeric value zero\n"; return 0; } (未加修饰)的类型为Character '0' does not have numeric value zero Character '\0' does have numeric value zero 0的类型为int,{{1} }也是'0'类型。 (也可能有警告,因为比较涉及编译时已知的值)。允许比较,但涉及类型转换,这可能表明在某些情况下程序员的错误。