繁体   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