2013-03-27 77 views
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 

回答

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.

+0

我明白類型轉換整數,浮動,但我不明白它的結構。服務器(&服務器)的引用是否映射到uv_stream_t *的值? – bodokaiser 2013-03-27 16:29:26

+0

這是否要求uv_tcp_t具有與uv_stream_t相同的屬性?我仍然不明白哪些規則適用於結構體。 – bodokaiser 2013-03-27 16:32:10

+0

我在起始帖子中添加了一個示例 – bodokaiser 2013-03-27 16:35:21

3

它被稱爲type cast或類型轉換。當你想將其中一種數據轉換爲另一種類型的數據時使用它。

+0

哪些規則不類型轉換遵循結構? – bodokaiser 2013-03-27 16:29:56

0
(some_type) *apointer 

這意味着你投的apointer內容到some_type

相關問題