将struct转换为数组?

前端之家收集整理的这篇文章主要介绍了将struct转换为数组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在学习C,我无法理解以下代码
struct dns_header
{
    unsigned char ra : 1;
    unsigned char z : 1;
    unsigned char ad : 1;
    unsigned char cd : 1;
    unsigned char rcode : 4;
    unsigned short q_count : 16;

};

int main(void)
{
    struct dns_header *ptr;
    unsigned char buffer[256];

    ptr = (struct dns_header *) &buffer;

    ptr->ra = 0;
    ptr->z = 0;
    ptr->ad = 0;
    ptr->cd = 0;
    ptr->rcode = 0;
    ptr->q_count = htons(1);

}

我不明白的是ptr =(struct dns_header *)& buffer;

任何人都可以详细解释这个吗?

解决方法

您的缓冲区只是一个连续的原始字节数组.从缓冲的角度来看,它们没有语义:你不能做像buffer-> ra = 1这样的事情.

但是,从struct dns_header *的角度来看,这些字节将变得有意义.你在用ptr =(struct dns_header *)& buffer做什么将指针映射到数据.

ptr现在将指向数据数组的开头.这意味着当你写一个值(ptr-> ra = 0)时,你实际上是在修改缓冲区中的字节0.

您正在转换缓冲区数组的struct dns_header指针的视图.

原文链接:https://www.f2er.com/c/239597.html

猜你在找的C&C++相关文章