2017-10-01 46 views
2

我剛剛開始使用C編程。我已經讀了0作爲一個整數常量,指向一個空指針與指針比較,'\ 0'指的是一個空字符,將所有位設置爲0的東西。而在關於我的問題的情況下,我知道我應該使用'\ 0'。但是我可以看到許多使用0的實現。這樣會有什麼不同? 我不想和任何工作一起去。直到我明白爲什麼,我才能繼續前進。 謝謝!使用memset將struct sockaddr_in設置爲0和' 0'會有什麼區別?

+1

的可能的複製[什麼是EOF的值和在C '\ 0'](https://stackoverflow.com/questions/4705968/ what-is-value-of-eof-and-0-in-c) –

回答

2

沒有區別。他們是平等的。

+0

好的。謝謝。嗯,但是0和'\ 0'本質上不同,對吧?是否有可能簡單解釋爲什麼他們在這裏是平等的? – Manic

+0

他們總是平等的。這只是表示同一事物的另一種方式,因此您可以在字符串文字中使用它,例如:'char c [] =「a \ 0b \ 0c」;'。你可以把它寫成'char c [] = {'a',0,'b',0,'c'}'。它將完全相同。 – bezet

+0

字符'0'是整數48.而字符'\ 0'是整數0。 – Questionable

2

絕對沒有區別。請使用0,因爲您將內存置零,並且您不希望在比較char陣列的任何元素與'\0'以表示您正在查找空字符時,像您所做的那樣強調內存的任何性質。

更確切地說,' '是一個給出與指定的字符對應的整數常量的表達式。在這種特殊情況下,的計算結果爲相同的整數 - 0。所以,沒有區別。

3

它們是等價的。

int n = 0; 
char ch = '\0'; 

對於指針使用NULL宏:用字符或字節爲單位打交道時

但它是很常見的整數工作時使用0,和'\0'

memset具有下列原型:

void * memset (void * ptr, int value, size_t num); 

雖然value具有int類型,它被解釋爲字節值。所以沒有區別。

1

char是一個整數類型,它意味着您可以使用簡單引號如'a'的字符實際上是整數值。我邀請你去查找ascii,你會看到字符和整數之間的聯繫。 你可以做一些簡單的測試與printf()

printf("%c == %d == %c\n", 'A', 'A', 65); 

你會發現角色'\0'具有整數值0,所以沒有區別,你可以在你的代碼中使用0'\0',編譯器這是同一件事。 通常,NULL是一個用於(void *) 0的宏,其值爲0,轉換爲通用指針(它仍然是值0,但它將被解釋爲指針類型)。

2

在C中,字符文字如'x'int類型,這意味着'\0'0不僅僅是數值上相等,它們是100%的等效語義。它們是相同整數常量的兩種不同的拼寫。您只能使用檢查令牌拼寫的構造來區分差異,例如預處理器的###運算符。

(是的,這意味着'\0'爲空指針常數。)

相關問題