我试图找出一段构建 hostent 对象的代码,更具体地说,它的工作部分是填充 h_addr_list 数组。
我对分配到数组中的值被强制转换为这一事实感到困惑char*
,据我所知,这个数组与字符串无关。
我注意到h_addr_list
数组实际上被键入为char**
.
我看到的唯一注意到这一事实的地方是beej 网络编程指南第 9.7 节 http://beej.us/guide/bgnet/output/html/multipage/gethostbynameman.html,但即使没有解释为什么这样输入。
有没有理由h_addr_list
键入为char**
并不是void*
/void**
(或者其他可能提供更多信息的内容)?
char *
不一定指 C 字符串,还指需要按字节寻址的已知长度的内存块,大概是因为它来自网络。
在类型之前,例如int8_t
and uint8_t
被添加到C99中,char *
是引用连续字节数组的唯一实用方法。实际上,struct hostent
早于 C89,它正式化了void
类型。如果今天编写,该字段将被声明为void **
或者可能uint8_t **
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)