我有关于数组初始化的问题
之间有什么区别
char a [6] = {0};
和
char a [6] = {'0','0','0','0','0','0'};
编译器如何解释上述两个表达式?它们是否相同?
答案 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'
类型。 (也可能有警告,因为比较涉及编译时已知的值)。允许比较,但涉及类型转换,这可能表明在某些情况下程序员的错误。