我正在尝试理解其他人编写的C代码,并且遇到了一段代码,我不理解所有的语法和部分我不明白我不知道如何搜索。我希望得到关于如何搜索这个和我可能遇到的其他类似事情的解释或信息,或者两者兼而有之。有问题的代码如下:
int r = uv_listen((uv_stream_t*) &server, 128, on_new_connection);
我知道r是一个被声明并初始化为函数“uv_listen()”返回的值的变量,128是一个文字int参数,on_new_connection必须是一个函数指针,因为这是一个名称。回调被调用的函数。 server是自定义类型(uv_tcp_t)的变量,并且带有&它指的是服务器的地址。我不明白的是“(uv_stream_t *)& server”。看起来这是函数的参数之一。我可以理解一个函数调用,它返回一个值作为参数,但这看起来不像函数调用。 “uv_stream_t”是在其代码中定义的另一种自定义类型。
我不知道它是否有助于理解它的含义,但代码行来自编写的示例代码,以帮助理解如何使用libuv。
答案 0 :(得分:7)
这只是一个类型演员。 &server
提供server
变量的地址,并(uv_stream_t*)
强制转换该地址的类型。
根据帖子中的其他信息,似乎server
的类型为uv_tcp_t
,但uv_listen
需要指向uv_stream_t
的指针。这就是为什么你取server
的地址并将其转换为uv_stream_t*
。
注意:这只是有意义的,因为libuv定义uv_tcp_t
和uv_server_t
- 一般来说,你不能只是将指针类型转换为其他指针类型,并期望发生任何合理的事情。
答案 1 :(得分:2)
(uv_stream_t *)& server正在获取服务器地址并将其转换为uv_stream指针。
& server - 获取服务器地址
(uv_stream *) - 强制转换为uv_stream指针
答案 2 :(得分:0)
uv_listen
是一个函数,并接受一个参数作为uv_stream_t
的指针。
好。
&server
它由server
运算符获取&
的地址,现在你有了指针。
(uv_stream_t*) &server
以上代码,将指针强制转换为指针uv_stream_t
。
现在您拥有该功能所需的功能。
答案 3 :(得分:0)
它是一个类型转换运算符,用于告诉编译器接受& server作为指向uv_stream_t的指针。
据推测,'server'的类型不是uv_stream_t或子类,但是编码器知道将其视为一个是安全的。