[英]Struct pointer to be cast with another pointer
我试着理解下面的代码:
struct pbuf *p;
struct icmp_echo_hdr *iecho;
iecho = (struct icmp_echo_hdr *)p->payload;
它是用于将icmp_echo_hdr
复制到p
的有效负载还是用于任何其他目的?
和其他指针:
struct icmp_echo_hdr {
PACK_STRUCT_FLD_8(u8_t type);
PACK_STRUCT_FLD_8(u8_t code);
PACK_STRUCT_FIELD(u16_t chksum);
PACK_STRUCT_FIELD(u16_t id);
PACK_STRUCT_FIELD(u16_t seqno);
} PACK_STRUCT_STRUCT;
struct pbuf {
void *payload;
u16_t tot_len;
u16_t len;
u8_t /*pbuf_type*/ type;
u8_t flags;
u16_t ref;
};
它是用于将 icmp_echo_hdr 复制到 p 的有效负载还是用于任何其他目的?
不,它不会将icmp_echo_hdr
复制到p 的负载。 它以另一种方式工作。 它将p->payload
的值作为struct icmp_echo_hdr*
iecho
到iecho
。
(struct icmp_echo_hdr*)
称为类型转换。 它将右侧的值的类型更改为指定的类型。 这样做是因为iecho
是struct icmp_echo_hdr*
类型。 这是可以做到的,因为p->payload
是一个指针,我们可以将一种类型的指针转换为另一种类型的指针。
你的所有代码都没有,没有提到p是如何构造的,因为p内容的成员变量是void *,所以可以进行任意类型的转换
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.