数组中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。 (也可能会出现警告,因为比较涉及编译时已知的值)。比较是允许的,但涉及类型转换,这在某些情况下可能表明程序员的错误。