0

我仍在学习 C 并且有一个与我经常看到的东西相关的问题。如果我错了,请纠正我,语句 1 是否等同于语句 2?

  1. (struct sockaddr *) &echoServAddr
  2. struct sockaddr echoServAddr

如果我理解正确,我们将转换&echoServAddr为与sockaddr.


那么下面的代码是通过地址传递结构的吗?

/* Bind to the local address */
if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) {
    perror("bind() failed");
    exit(1);
} 
4

2 回答 2

1

假设这些都是函数参数。这些是不同的。第一个是通过引用传递结构。第二个是按原样传递结构 - 复制整个数据。

Bind 接受const struct sockaddr *它作为第二个参数,所以这是正确的代码。

于 2013-01-09T22:01:58.677 回答
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:是的,您可以将一种结构类型的指针转​​换为不同结构类型的指针。

除非底层结构实际上是兼容的,否则这样做会让你非常难过:)

于 2013-01-09T22:18:33.340 回答