簡體   English   中英

數組中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零字節空字節 ,也寫為'\\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

'0'是顯示的字符(例如,在屏幕上),因此看起來像零。 在所有標准字符集中,它都有一個非零的數值。 例如,在ASCII字符集中,其值為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'0'的類型為char ,而'\\0'的類型也為char (由於比較涉及編譯時已知的值,因此可能還會發出警告)。 比較是允許的,但涉及類型轉換,在某些情況下可以指示程序員錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM