The difference between 0 and '0' in array

前端 未结 2 1532
情书的邮戳
情书的邮戳 2020-12-18 13:12

I have a question about array initialization

What is the difference between

char a[6]={0};

and

char a[6]={\'0\',\'0\',\'0\',\'0\',\'0\',\'0\

相关标签:
2条回答
  • 2020-12-18 13:49

    '0' is the ASCII character for the number 0. Its value is 48.

    The constant 0 is a zero byte or null byte, also written '\0'.

    These four are equivalent:

    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
    
    0 讨论(0)
  • 2020-12-18 14:02

    '0' is a character which is displayed (e.g. on a screen) so it looks like a zero. In all standard character sets, it has a non-zero numeric value. For example, in the ASCII character set it has numeric value 48.

    0 is a literal which yields a numeric value of zero. '\0' is a literal which gives a character with numeric value of zero.

    Putting values into an array does not change this.

    You can test this using something like

    #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;
    }
    

    which will always print out

    Character '0' does not have numeric value zero
    Character '\0' does have numeric value zero
    

    Some compilers may give a warning on the above code because 0 (unadorned) is of type int, '0' is of type char, and '\0' is also of type char. (There may also be warnings because the comparisons involve values known at compile time). The comparisons are allowed, but involve type conversions which can indicate programmer mistakes in some circumstances.

    0 讨论(0)
提交回复
热议问题