将指向结构的指针作为函数参数传递

时间:2013-11-06 18:58:26

标签: c pointers struct pass-by-reference

我正在尝试将指向结构的指针传递给单独的函数。但是当我去编译时,我得到warning: passing argument 1 of 'build_network_state' from incompatible pointer type

这是一个帮助函数编译到我的程序中:

typedef struct router {
    int num;
    char label[64];
    Topology *topology;
} Router;

这是来自.c文件:

void build_network_state(Router *ptr) {

    fprintf(stdout, "Hello from router %s\n", ptr->label);
}

int main(int argc, char *argv[]) {

    Router* this_router = malloc(sizeof(Router));

    ...

    fprintf(stdout, "test: %s\n", this_router->label); // output looks fine if I comment the next line
    build_network_state(&this_router);
}

2 个答案:

答案 0 :(得分:1)

build_network_state(&this_router);

应该是

build_network_state(this_router);

因为this_router已经是Router *类型。 (但&this_router的类型为Router **

Router* this_router = malloc(sizeof(Router));

应该是

Router* this_router = malloc(sizeof *this_router);

您希望分配结构对象的大小,而不是指向结构对象的指针大小。

答案 1 :(得分:1)

this_router已经是指向路由器结构的指针。您无需将地址传递给build_network_state

build_network_state(this_router);