c结构被传递到函数中

时间:2013-01-09 21:53:15

标签: c pointers casting

我还在学习C并且有一个与我经常看到的相关的问题。如果我错了请纠正我,声明1相当于声明2吗?

  1. (struct sockaddr *) &echoServAddr
  2. struct sockaddr echoServAddr
  3. 如果我理解正确,我们会将&echoServAddr投射到与sockaddr相同的结构中。


    以下代码是否通过地址传递结构?

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

2 个答案:

答案 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: 是的,您可以将一个结构类型的指针强制转换为不同结构类型的指针。

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