2012-11-22 25 views
2

我試圖弄清楚構成hostent對象的一段代碼,更具體地說,它構成了h_addr_list數組的一部分工作。爲什麼h_addr_list(在hostent結構中)鍵入爲char **而不是void *?

我感到困惑的是,被分配到數組中的值被轉換爲char*,看到這個數組與字符串無關,據我所知。我注意到h_addr_list數組實際上輸入爲char**

我看到的唯一注意到這個事實的地方是section 9.7 in beej's Guide to Network Programming,但即使在那裏,也沒有解釋爲什麼要輸入它。

是否有一個原因,h_addr_list的類型爲char**而不是void*/void**(或其他任何可能有點更多的信息)?

回答

2

char *不一定是指C字符串,而且也是指需要用字節尋址的已知長度的存儲器塊,大概是因爲它是從網絡到達的。

在類型如int8_tuint8_t被添加到C99之前,char *是引用連續字節數組的唯一實用方式。事實上,struct hostent早於C89,它正式化了void類型。如果今天寫入,該字段將被聲明爲void **或可能的uint8_t **

+2

原生K&R C根本不支持'void'類型。 – alk

+0

好吧,我想我應該爲自己找不到那個而感到有點慚愧。謝謝! – Neowizard

+0

我已經更新了相應的答案。 – user4815162342

相關問題