[英]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.