联合定义中的sizeof`结构

问题描述 投票:0回答:1

要按字节访问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
}

到目前为止阅读:unionstruct

c struct unions c11
1个回答
0
投票

您可以给struct指定标签名称并使用它。

union {
    struct inner {
        char hi;
        char lo;
    } by_name;
    char as_bytes[sizeof(struct inner)];
} U2;
© www.soinside.com 2019 - 2024. All rights reserved.