老师,我这有一个关于结构体的初始化问题
来源:7-8 结构体的内存布局
mahsiaoko
2020-03-27
老师,您好!我最近在阅读一个C语言的源码,里面有一个结构体的初始化,
#include <stdio.h>
#include <stdbool.h>
int main() {
unsigned char val[] = { 139,155,125,94,0,233,7,0,24,0,1,0,4,0,1,3,29,33,0,0 };
typedef struct knot_db_val {
void* data;
unsigned long len;
} knot_db_val_t;
knot_db_val_t data = {
val,20
};
struct entry_h
{
unsigned int time;
unsigned int ttl;
unsigned char rank : 6;
bool is_packet : 1;
bool has_optout : 1;
unsigned char _pad;
unsigned char data[];
};
const struct entry_h* eh=data.data;
return 0;
}
这一句话:
const struct entry_h* eh=data.data;
这个是怎么进行初始化的,我觉得应该是以数组中的0为分隔符,但是具体是怎么样的?老师能不能解答一下?我用visual studio跟踪了一下,发现没有具体的过程。谢谢!
老师,您看我红线标出来的部分,包含了rank、is_packet、has_optout、_pad以及部分的unsigned char data[],不满足缺省对齐原则,我也没有设置什么让他连续分布,这个是为什么?
写回答
1回答
-
以val[]中24的值为分界点,24前面6bit对应unsigned char rank,后面2个bit对应is_packet和has_optout,其他自己去推吧。
032020-03-28
相似问题