数组中0和'0'的区别
The difference between 0 and '0' in array
我有一个关于数组初始化的问题
和
有什么区别
char a[6]={0};
和
char a[6]={'0','0','0','0','0','0'};
编译器如何解释以上两个表达式?他们只是一样还是不一样??
'0'
是数字0的ASCII字符,其值为48。
常量0
是零字节或空字节,也写作'[=13=]'
.
这四个是等价的:
char a[6] = {0};
char a[6] = {0, 0, 0, 0, 0, 0};
char a[6] = {'[=10=]', '[=10=]', '[=10=]', '[=10=]', '[=10=]', '[=10=]'};
char a[6] = "[=10=][=10=][=10=][=10=][=10=]"; // sixth null byte added automatically by the compiler
'0'
是一个显示的字符(例如在屏幕上),所以它看起来像一个零。在所有标准字符集中,它都有一个非零数值。例如,在ASCII字符集中它有数值48
.
0
是一个产生零数值的文字。 '[=15=]'
是一个文字,它给出一个数值为零的字符。
将值放入数组不会改变这一点。
您可以使用
之类的东西进行测试
#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 != '[=10=]') std::cout << "not ";
std::cout << "have numeric value zero\n";
return 0;
}
这将始终打印出来
Character '0' does not have numeric value zero
Character '[=11=]' does have numeric value zero
由于0
(unadorned)是int
类型,'0'
是char
类型,而'[= 15=]'
也是类型 char
。 (也可能会出现警告,因为比较涉及编译时已知的值)。比较是允许的,但涉及类型转换,这在某些情况下可能表明程序员的错误。
我有一个关于数组初始化的问题
和
有什么区别char a[6]={0};
和
char a[6]={'0','0','0','0','0','0'};
编译器如何解释以上两个表达式?他们只是一样还是不一样??
'0'
是数字0的ASCII字符,其值为48。
常量0
是零字节或空字节,也写作'[=13=]'
.
这四个是等价的:
char a[6] = {0};
char a[6] = {0, 0, 0, 0, 0, 0};
char a[6] = {'[=10=]', '[=10=]', '[=10=]', '[=10=]', '[=10=]', '[=10=]'};
char a[6] = "[=10=][=10=][=10=][=10=][=10=]"; // sixth null byte added automatically by the compiler
'0'
是一个显示的字符(例如在屏幕上),所以它看起来像一个零。在所有标准字符集中,它都有一个非零数值。例如,在ASCII字符集中它有数值48
.
0
是一个产生零数值的文字。 '[=15=]'
是一个文字,它给出一个数值为零的字符。
将值放入数组不会改变这一点。
您可以使用
之类的东西进行测试#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 != '[=10=]') std::cout << "not ";
std::cout << "have numeric value zero\n";
return 0;
}
这将始终打印出来
Character '0' does not have numeric value zero
Character '[=11=]' does have numeric value zero
由于0
(unadorned)是int
类型,'0'
是char
类型,而'[= 15=]'
也是类型 char
。 (也可能会出现警告,因为比较涉及编译时已知的值)。比较是允许的,但涉及类型转换,这在某些情况下可能表明程序员的错误。