Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是(stuct sockadr*)&;servaddr是什么意思?_C_Sockets - Fatal编程技术网

什么是(stuct sockadr*)&;servaddr是什么意思?

什么是(stuct sockadr*)&;servaddr是什么意思?,c,sockets,C,Sockets,我遇到了这段代码: (stuct sockadrr*)&servaddr 这是什么意思?您以某种方式将结构强制转换为servaddr 我只是想弄清楚这段代码的语法以及它在C语言中的含义 您以某种方式将结构强制转换为servaddr 不,反过来说,您将servaddr的地址强制转换为指向struct sockaddr的指针 如果servaddr具有类型foo,&servaddr是foo*,指向foo的指针。如果调用的函数需要指向struct sockaddr的指针,则需要强制转换它-如

我遇到了这段代码:

(stuct sockadrr*)&servaddr 
这是什么意思?您以某种方式将结构强制转换为
servaddr

我只是想弄清楚这段代码的语法以及它在C语言中的含义

您以某种方式将结构强制转换为servaddr

不,反过来说,您将
servaddr
的地址强制转换为指向
struct sockaddr
的指针


如果
servaddr
具有类型
foo
&servaddr
foo*
,指向
foo
的指针。如果调用的函数需要指向
struct sockaddr
的指针,则需要强制转换它-如果类型兼容,则将
foo*
作为
struct sockaddr*
传递会起作用。

各种套接字函数被声明为将通用网络地址作为参数,您强制转换特定网络地址结构的地址(例如中的sockaddr_),以便将其作为参数传递给函数。

问题的措辞表明您完全不熟悉C强制转换的语法和语义以及其他基本C语法。我建议你读一些关于C的书,而不是通过在论坛上问一些狭隘的问题来学习C语言。谢谢。。我想问的另一件事是,我在..中使用了sockaddr_,所以逻辑上应该使用(struct sockaddr_in*)&serveraddr,对吗?还有一件事,为什么我们必须把关键字struct放在parethese里面?不把它放进去是错误的?是的,在*中转换为
struct sockaddr\u将是正确的事情(再一次说,假设类型是兼容的[对于用户来说,不一定是兼容类型的标准意义上])。您需要
struct
,因为在C中没有隐式
typedef struct sometag{..}sometag类似于C++。如果提供了typedef(或页眉提供了一个),则可以使用typedef名称而不是
struct标记