什么是(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标记
。