我想知道以下语法的作用:
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
答案 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
类型