gpt4 book ai didi

c - (char *) (&struct_var) 在 C 中做什么?

转载 作者:行者123 更新时间:2023-11-30 14:33:38 25 4
gpt4 key购买 nike

我目前正在学习 802.11 网络,在其中一个教程中,我遇到了这段代码

send_len = sendto(sock_raw,(char *) &struct_var,64,0,(const struct sockaddr*)&sadr_ll,sizeof(struct sockaddr_ll));

将 struct var 类型转换为 char * 的目的是什么?

最佳答案

C 中除了位域之外的每个对象都是由字节构造的。 C 2018 第 6.2.6 条讨论了类型的表示,第 6.2.6.1 2 条说:

Except for bit-fields, objects are composed of contiguous sequences of one or more bytes, the number, order, and encoding of which are either explicitly specified or implementation-defined.

换句话说,结构是由 C 实现为您制造的。当您定义和使用结构体时,编译器会根据您访问的结构体成员布置字节并读写各种字节,从而为您构建该结构体。

网络软件不知道这种制造的结构。网络软件只是来回发送字节。因此,要发送结构,您可以让网络软件发送各个字节。如果另一端的接收软件愿意的话,则可以将字节放在一起并将它们用作结构。

将指向结构的指针转换为指向 char 的指针是一种表明您希望将制造的结构视为其组成的原始字节的方式。在这种情况下,显式转换是不必要的,因为函数参数被声明为 void *,而 C 的规则规定任何指向对象的指针都可以隐式转换为 void *.换句话说,您只需传递 &struct_var 即可,编译器会自动为您转换它。

关于c - (char *) (&struct_var) 在 C 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59225918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com