0

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

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
4

3 回答 3

3

它被称为类型转换或类型转换。当您要将一种类型的数据转换为另一种类型的数据时使用它。

于 2013-03-27T16:21:26.760 回答
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.

于 2013-03-27T16:23:05.860 回答
0
(some_type) *apointer

这意味着您将apointer内容转换为some_type类型

于 2013-03-27T16:21:51.133 回答