这是我尚未完全理解的陈述。
serv_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;
这是否意味着:
hp
放入h_addr
struct in_addr*
hp->h_addr
的类型转换
s_addr
所以serv_addr.sin_addr.s_addr包含主机名和选择主机的IP地址。
这是对的吗?
(PS:hp是struct hostent *hp ; hp=gethostbyname(argv[1]);
)
答案 0 :(得分:3)
您需要了解the arrow operator。
基本上,当你有一个指向该结构的指针时,它可以让你访问结构的成员。
因此,hp->h_addr
可让您访问h_addr
指向hostent
结构的hp
成员。然后,您将该成员投射到in_addr *
并解除引用,以便您可以访问s_addr
结构的in_addr
成员。
答案 1 :(得分:2)
(1)错了。 hp->h_addr
是(*hp).h_addr
的缩写。这是一个解除引用加成员选择。
在英语中,有人可能会说“将hp
的{{1}}复制到h_addr
的{{1}}。这需要演员。”