这篇文章将以此为基础,但会更加通用。
通常,我会看到指向大型结构的指针被转换为指向较小结构的指针,并且我认为它是可行的,因为指针只是结构中第一个字节的地址。 我仍然有一个问题是,大多数方法在未指向期望的类型时如何处理指针。
我将以Socket API为例:
sockaddr_storage
比sockaddr
但是指向sockaddr_storage
指针在传递给类似函数之前先转换为指向sockaddr
指针。
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
因此,当指针指向比预期更大的结构时,如何使用函数倾向于处理事情。 他们说
“哦,传递给我的大小( socklen_t addrlen
)比我想象的要大。最好将此指针转换回sockaddr_storage
!”
然后像这样访问它的成员? 还是他们做的事情更复杂?