在 hdr=(struct bpf_hdr *)(buf+off); 语句之后hdr就指向了buf+off地址开始的数据区了,那么hdr->bh_datalen和hdr->bh_caplen当然就有值啦.
  指针的类型是指针解析他所指向的内存块的方式的模板,C语言大量使用的是结构体指针。要知道结构体在内存中的存储方式,通常结构体不是连续存储的,他有地址对齐问题。 

解决方案 »

  1.   

    那他这样使用赋值就太差劲了,我还要自己根据他的STRUCTRUE的定义去推断结构体元素的内容。谢谢,给您分了
      

  2.   

    你可能没有理解类型化的概念,他这样做没错,内存本身是无类型的,他将指针buf+off 强制为struct bpf_hdr * 类型,以后他就可以使用hdr以bpf_hdr 结构的方式来解析buf+off开始的 sizeof(struct bpf_hdr) 长的内存区了。