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 に答える