伊圣雨《TCP/IP网络编程》域名解析解释

在这里插入图片描述
解释:调用该函数可以从域名返回与此域名相关的地址信息,存储在hostent结构体里,返回结构体在内存中的地址。难点是如何存取和理解结构体中的变量。
char ** h_addr_list :这是一个二级指针,h_addr_list存储了一个指针的地址,而该指针指向一个char型变量。
(2)
在这里插入图片描述
h_addr_list 实际上存储的是一个指针数组的首地址,从该地址开始存储了数个指针。32位内存下,每4个字节存储一个地址。64位架构下每8字节储存一个内存地址。显然64位有比32位更大的内存寻址能力。而且奇特的是,指针数组的最后存储了一个空地址,null,表示数组的结束。因为int a[3] ,常规数组a里存三个数,我们是无法确定数组大小的,内存里数据都是连续的。丢掉编译时候的符号表,数组a的大小无从所知。而hostent结构体里,没分量表示指针数组的大小,因此以最后一个空指针表示指针数组的结束。
(3)
在这里插入图片描述
这也就解释了22 与26 行,为什么可以在for循环里如此引用h_addr_list中的值。而如h_addr_list[3],到底是内存地址从h_addr_list加12还是24字节,跟32位cpu还是64位cpu有关。这不是我们需要考虑的。但编译器编译此段代码会正确的解析到h_addr_list开始的每个内存地址值。
(4)
在这里插入图片描述
h_addr_list被定义为 char **,更合适的是定义为 (void * * )a,表示a存储了指针的地址,而指针又指向了某种不明确的变量。但早期没有这样的c语法。故以字节形式的char代替。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值