use*_*972 6 c arrays struct pointers
我目前正在学习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只是一个连续的原始字节数组。从角度来看,它们没有语义buffer:你不能做类似的事情buffer->ra = 1。
然而,从某个struct dns_header *角度来看,这些字节将变得有意义。您正在做的ptr = (struct dns_header *) &buffer;是将指针映射到数据。
ptr现在将指向数据数组的开头。这意味着当您写入值 ( ptr->ra = 0) 时,您实际上是在修改 中的字节 0 buffer。
struct dns_header您正在转换数组指针的视图buffer。