我还在学习C并且有一个与我经常看到的相关的问题。如果我错了请纠正我,声明1相当于声明2吗?
(struct sockaddr *) &echoServAddr
struct sockaddr echoServAddr
如果我理解正确,我们会将&echoServAddr
投射到与sockaddr
相同的结构中。
以下代码是否通过地址传递结构?
/* Bind to the local address */
if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) {
perror("bind() failed");
exit(1);
}
答案 0 :(得分:1)
假设这些都是函数参数。这些是不同的。第一个是通过引用传递结构。第二个是按原样传递结构 - 整个数据被复制。
Bind接受const struct sockaddr *
作为它的第二个参数,这是正确的代码。
答案 1 :(得分:0)
// This declares a variable of type "struct sockaddr"
struct sockaddr echoServAddr;
// This merely takes a pointer to your structure,
// It (redundantly) casts that pointer to "struct sockaddr *"
struct sockaddr *myPtr = (struct sockaddr *) &echoServAddr;
// This calls the function "bind()" and passes it a pointer to your structure
if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) {
perror("bind() failed");
exit(1);
}
PS: 是的,您可以将一个结构类型的指针强制转换为不同结构类型的指针。
除非底层结构实际上是兼容的,否则这样做会让你非常伤心:)