使用(char)0
和表示字符數組中的終止空字符有什麼區別?(char)0和' 0'之間有什麼區別? in C
回答
字符字面值中的反斜線符號允許您指定字符的數值而不是使用字符本身。所以'\1'
[*]表示「數值爲1的字符」,'\2'
表示「數值爲2的字符」等。由於C的怪癖,字符文字實際上具有類型int
,實際上int
也用於處理其他上下文中的字符,例如返回值fgetc
。所以'\1'
的意思是「數值爲int,數值爲1的字符」等等。
由於字符在C數值,實際上是(char)1
,並且在'\1'
額外裝飾對編譯器沒有影響「其數值爲1的字符」 - '\1'
具有相同的類型和值作爲因此在字符串文字中比在字符文字中更需要反斜線符號,用於插入沒有自己的轉義代碼的不可打印字符。
就我個人而言,如果我的意思是0,我更願意寫0
,並讓隱式轉換完成它們的工作。有些人覺得很難理解。與這些人一起工作時,如果您的意思是一個值爲0的字符,也就是說您期望0
很快將隱式轉換爲char
類型,那麼編寫'\0'
會很有幫助。同樣,當你的意思是一個空指針常量時,它可以幫助編寫NULL
,當你的意思是一個雙精度值爲0的時候,0.0
,依此類推。
它是否對編譯器有所不同,以及它是否需要轉換,取決於上下文。由於'\0'
與0
具有完全相同的類型和值,因此需要在相同的情況下將其轉換爲char
。所以和(char)0
類型不同,對於完全相同的表達式,您可以考慮使用(char)'\0'
與(char)0
或'\0'
與0
。 NULL
具有實現定義類型 - 有時需要將其轉換爲指針類型,因爲它可能具有整數類型。 0.0
有double
,所以肯定不同於0
。 float f = 1.0;
與float f = 1;
和float f = 1.0f
相同,而1.0/i
,其中i
是int,通常與1/i
的值不同。
因此,是否使用'\0'
或0
的任何一般規則純粹是爲了方便您的代碼的讀者 - 這與編譯器完全相同。選擇你(和你的同事)更喜歡的外觀,或者定義一個宏ASCII_NUL
。
[*]或'\01'
- 因爲反斜槓引入了八進制數目,不是小數,它有時明智通過確保它開始於一個0使爲0沒有區別,1使這更明顯一個位,2當然。我會說「有時」,因爲反斜槓只能跟着3個八進制數字,所以你不能寫\0101
而不是\101
,提醒讀者它是一個八進制值。這是非常尷尬的,並導致更多的裝飾:大寫A的\x41
,因此如果需要,您可以將'\x0'
寫爲0。
它們都是0,但是(char) 0
是字符,而'\0'
是(不直覺)是int
。如果值爲0,則此類型差異通常不會影響您的程序。
我更喜歡'\0'
,因爲這是爲此設計的常數。
字符數組意味着你正在服用的字符串,所以我建議你在字符數組的末尾讀取來自用戶,因爲0
的所有字符後使用'\0'
是簡單的人物,但'\0'
是NULL
指示字符串的結尾。
'(char)0'和''\ 0''是相同的值,但'\ 0'是最常用的,因爲這是用於空字符的'char'。 – chema989
- 1. {0}和「」之間有什麼區別?
- 2. {0}和+之間有什麼區別?
- 3. firstChild和[0]之間有什麼區別?
- 4. `[blah addObject:@「1」];``和`[blah insertObject:@「0」atIndex:0]之間有什麼區別;`?
- 5. 之間有什麼區別{0}和{0,數字,整數}
- 6. -0和0有什麼區別?
- 7. 什麼是char *海峽之間的區別是零和STR [0] ==「\ 0」
- 8. | 0和~~有什麼區別?
- 9. [0-9] +和[0-9] ++之間的區別是什麼?
- 10. str [0]和str.charAt(0)之間的區別
- 11. 「return 0」和「exit(0)」之間的區別
- 12. char [] c和char c []有什麼區別?
- 13. 0 ::和0之間有什麼區別:過濾一個numpy數組?
- 14. BigDecimal(「0」)和BigDecimal.ZERO之間有區別嗎?
- 15. strlen()== 0和empty()之間有區別嗎?
- 16. 「#if Foo - 0 == 0」和「#if defined(Foo)&& Foo == 0」之間的區別是什麼?
- 17. C++中「some」==「some \ 0」和strcmp(「some」,「some \ 0」)有什麼區別?
- 18. C語言中ptr = my_array和ptr =&my_array [0] [0]有什麼區別?
- 19. 使用.first()和.eq(0)之間有什麼區別?
- 20. ejabberd中MAM協議的0和1之間有什麼區別?
- 21. 定義char a [5]和char(* a)[5]之間有什麼區別?
- 22. .communicate()和.communicate()[0]有什麼區別?
- 23. 0(%eax)和(%eax)有什麼區別?
- 24. 「kill 0」和「kill - - $$」有什麼區別?
- 25. FILE_ATTRIBUTE_NORMAL和0有什麼區別?
- 26. C#byte []和char []之間有什麼區別[]
- 27. srand(1)和srand(0)之間的區別
- 28. static const char * const和static const char []之間有什麼區別?
- 29. typedef char [4] A和typedef char(&A)[4]之間有什麼區別?
- 30. next()和next().CharAt(0)之間的區別;
我agreen - 當你訴諸鑄造,我認爲你應該至少有另一個思考問題。爲什麼把蘋果和橘子比較? –
他不應該施放。我相信'char c = 0;'是合法的,並且它在gcc上用'-Wettra -pedantic'編譯。我只是覺得''0''更好地表達了這個意圖。 –
我截斷了一個字符串作爲我的代碼的一部分。因此,在我必須結束的部分添加空字符時,我對於哪種表示效果更好感到困惑。 – Sathya