0

这是一个我还没有完全理解的说法。

serv_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;

这是否意味着:

  1. hp投入h_addr
  2. struct in_addr*类型转换hp->h_addr
  3. 所有这些都被复制到s_addr

因此 serv_addr.sin_addr.s_addr 包含所选主机的主机名和 IP 地址。
这是正确的吗?
(PS:马力是struct hostent *hp ; hp=gethostbyname(argv[1]);

4

2 回答 2

3

您需要了解箭头运算符

本质上,当您拥有指向该结构的指针时,它使您可以访问该结构的成员。

因此,hp->h_addr您可以访问指向的结构的h_addr成员。然后,您将该成员强制转换为 a并取消引用,以便您可以访问该结构的成员。hostenthpin_addr *s_addrin_addr

于 2012-06-13T16:55:29.770 回答
2

(1) 错误。hp->h_addr是 的缩写(*hp).h_addr。这是取消引用加上成员选择。

在英语中,有人可能会说“将hp's复制h_addrserv_addr'ss_addr中。这需要演员表。”

于 2012-06-13T16:55:39.157 回答