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