gpt4 book ai didi

c++ - 难以理解 C++ 中 inet_ntop() 的第二个参数

转载 作者:行者123 更新时间:2023-11-30 03:30:53 24 4
gpt4 key购买 nike

我正在尝试根据此处给出的教程用 C++ 创建一个基本的网络服务器:

https://vichargrave.github.io/articles/2013-02/tcp-ip-network-programming-design-patterns-in-cpp

我无法理解以下行:

inet_ntop(PF_INET, (struct in_addr*)&(address->sin_addr.s_addr), ip, sizeof(ip)-1);

具体来说,我无法理解第二个参数:

(struct in_addr*)&(address->sin_addr.s_addr)

正在做。这个参数是我以前从未见过的语法,基于我所知道的它正在做两件事之一:

它是一个结构 in_addr 指针与地址中给定字段的 ANDing 或

它正在将 address->sin_addr.s_addr 的地址转换为 struct in_addr* 的指针

是哪一个?

编辑:所以看起来这是一个 Actor 。这引出了另一个问题。该参数似乎将 in_addr_t 类型的变量转换为一个没有意义的结构。这是对它的正确看法还是它在做别的事情?

此外,我引用了以下页面以获取有关此功能的文档:

http://pubs.opengroup.org/onlinepubs/7908799/xns/netinetin.h.html http://pubs.opengroup.org/onlinepubs/009695399/functions/inet_ntop.html

最佳答案

为了更好地理解,请从右向左阅读。

(struct in_addr*)&(address->sin_addr.s_addr)

所以,

address->sin_addr.s_addr --> uses the "address" ptr to access sin_addr.s_addr

然后

&(address->sin_addr.s_addr) takes the address of s_addr.

然后

(struct in_addr*) casts the address taken by & to in_addr.

上面的是有道理的,因为在这种情况下下面的两个是等价的

(struct in_addr*)&(address->sin_addr.s_addr) 
(struct in_addr*)&(address->sin_addr)

该结构的地址与 C/C++ 中第一个成员的地址相同。

关于c++ - 难以理解 C++ 中 inet_ntop() 的第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44644817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com