簡體   English   中英

與另一個指針一起轉換的結構指針

[英]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* iechoiecho

(struct icmp_echo_hdr*)稱為類型轉換。 它將右側的值的類型更改為指定的類型。 這樣做是因為iechostruct icmp_echo_hdr*類型。 這是可以做到的,因為p->payload是一個指針,我們可以將一種類型的指針轉​​換為另一種類型的指針。

你的所有代碼都沒有,沒有提到p是如何構造的,因為p內容的成員變量是void *,所以可以進行任意類型的轉換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM