[英]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.