![](/img/trans.png)
[英]What's the difference between sockaddr, sockaddr_in, and sockaddr_in6?
[英]What would be the difference between setting a struct sockaddr_in to 0 and '\0' using memset?
我剛開始使用C套接字編程。 我已經讀過0作為整數常量,與指針相比是指空指針,而'\\ 0'是指空字符,它將所有位設置為0。並且,在涉及我的問題的情況下,我知道我可能應該使用'\\ 0'。 但是我可以看到很多使用0的實現。 這樣有什么區別? 我不想接受任何可行的方法。 在我明白原因之前,我無法繼續前進。 謝謝!
沒有區別。 他們是平等的。
絕對沒有區別。 請使用0
因為您將內存歸零,並且不想像在將char
數組的任一元素與'\\0'
以表示您要查找空字符時那樣強調內存的任何性質。 。
更准確地說, ' '
是一個表達式,它給出一個與指定字符相對應的整數常量。 在這種特殊情況下, '\\0'
等於相同的整數0
。 因此,沒有區別。
它們是等效的。
但是在處理整數時通常使用0
,而在處理字符或字節時通常使用'\\0'
:
int n = 0;
char ch = '\0';
對於指針,請使用NULL
宏。
memset
具有以下原型:
void * memset ( void * ptr, int value, size_t num );
盡管value
具有int
類型,但它被解釋為字節值。 因此沒有區別。
在C語言中,諸如'x'
類的字符文字具有int
類型,這意味着'\\0'
和0
不僅在數值上相等,而且在語義上是100%等效的。 它們是相同整數常量的兩個不同拼寫。 您只能使用檢查令牌的拼寫的結構(例如預處理器的#
和##
運算符)來區分差異。
(是的,這意味着'\\0'
是一個空指針常量。)
char
是整數類型,這意味着您可以使用簡單引號(例如'a'
使用的字符實際上是整數值。 我邀請您查找ascii
,您將看到字符和整數之間的鏈接。 您可以使用printf()
做一些簡單的測試:
printf("%c == %d == %c\n", 'A', 'A', 65);
您會注意到字符'\\0'
具有整數值0
,所以沒有區別,您可以在代碼中使用0
或'\\0'
,對於編譯器而言,這是相同的。 通常情況下, NULL
是一個宏(void *) 0
至極是值0
澆鑄成通用指針(它仍然是值0
,但它會被解釋為指針類型)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.