c++ - C 关于选角的问题

标签 c++ c sockets casting

谁能给我解释一下这个说法!

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

最佳答案

获取hp->h_addr,并将其转换为struct in_addr*。 Actor 可能有不同的原因。也许 hp->h_addrvoid* 并且需要强制转换来告诉编译器应该使用什么类型来查找 s_addr。它也可能是另一个以 in_addr 作为其第一个成员的结构

struct in_addr {
  struct saddr_t s_addr;
};

struct socket {
  struct in_addr addr;
};

struct server {
  struct socket *h_addr;
};

server *hp;

然后,将 socket* 转换为 in_addr* 将是有效的,因为在其地址的开头有一个 in_addr。转换后,访问成员 s_addr。这些类型在 POSIX 下的网络编程中很常见,看起来不像我上面的例子,但上面可能是手头的情况。

关于c++ - C 关于选角的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607524/

相关文章:

linux - 如何为 3 个不同的事件(信号量、pthread 条件和阻塞套接字接收)阻塞单个线程?

linux - Docker 安装套接字卷

sockets - udp客户端在接收来自服务器的消息时发送ICMP "port unreachable"

c++ - 使用指针写入数组元素的问题

c++ - GDI+支持图形加速吗?

c++ - 替换 Windows 上的系统菜单弹出窗口

c - 结构宏

c++ - 在带有 cpptk 的 Windows 上的 C++ 应用程序中使用 TCL/Tk 的 Unresolved external 问题

c - 这段C代码是什么意思?

c - 带双引号的宏