将struct转换为数组?
发布时间:2020-12-16 05:00:52 所属栏目:百科 来源:网络整理
导读:我目前正在学习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; u
我目前正在学习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指针的视图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |