要按字节访问struct
,我正在使用union
。
typedef struct {
char hi;
char lo;
} range;
union {
range by_name;
char as_bytes[sizeof(range)];
} U1;
char use_U1(void){
char c = U1.as_bytes[0];
return U1.by_name.hi;
}
问题1:是否可以跳过typedef
?像这样:
union {
struct {
char hi;
char lo;
} by_name;
char as_bytes[2]; //want sizeof()
} U2;
天真char as_bytes[sizeof(by_name)]
无法编译:错误:此处未声明“ by_name”(不在函数中)
问题2:相同,但具有匿名结构,以避免在使用时键入.by_name
。
union {
struct {
char hi;
char lo;
};
char as_bytes[2]; //want sizeof()
} U3;
int use_U3(void){
char c = U3.as_bytes[0];
return U3.hi; // anonymous structure
}
您可以给struct
指定标签名称并使用它。
union {
struct inner {
char hi;
char lo;
} by_name;
char as_bytes[sizeof(struct inner)];
} U2;