指针参数之前的结构类型是做什么的?

时间:2013-03-27 16:19:38

标签: c types struct libuv

我想知道以下语法的作用:

func((some_type*) apointer)

这是一个简单的类型检查还是做了更多的事情? 为什么类型周围需要括号?

来自http://nikhilm.github.com/uvbook/networking.html#tcp的完整示例:

int main() {
    loop = uv_default_loop();

    uv_tcp_t server;
    uv_tcp_init(loop, &server);

    struct sockaddr_in bind_addr = uv_ip4_addr("0.0.0.0", 7000);
    uv_tcp_bind(&server, bind_addr);

    /* here it is */
    int r = uv_listen((uv_stream_t*) &server, 128, on_new_connection);

    if (r) {
        fprintf(stderr, "Listen error %s\n", uv_err_name(uv_last_error(loop)));
        return 1;
    }
    return uv_run(loop, UV_RUN_DEFAULT);
}

此致 博多

更新

这可行吗?

typedef struct one_t
{
    int counter;

} one_t;

typedef struct two_t
{
    another_t request;
} two_t;

(one_t*) two_t

3 个答案:

答案 0 :(得分:3)

它被称为type cast或类型转换。当您想要将一种数据类型转换为另一种类型的数据时,可以使用它。

答案 1 :(得分:2)

(uv_stream_t*)&server

是演员。它在这里用作C中的多态仿真。

uv_tcp_t可以声明为:

typedef struct uv_tcp_t
{
    uv_stream_t base; //base has to be first member for byte reinterpretation to work

    /*...snip...*/

} uv_tcp_t;

这允许uv_listen在uv_tcp_t上运行,就像它是一个uv_stream_t变量一样。

很常见,而且(AFAIK)完全有效C.

答案 2 :(得分:0)

(some_type) *apointer

这意味着您将apointer内容投射到some_type类型