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