4

可能重复:
可以在声明中初始化联合吗?

我浏览了整个互联网,找不到如何在编译时在结构中设置联合值的示例,我希望你们能帮助我。例如,一个简单的结构是:

typedef enum {
     typeFloat,
     typeInt
} Type;

typedef struct myStruct { 
     Type     elementType;
     int      valueInt;
     float    valueFloat;
} myStruct;

然后你可以声明一个局部变量:

myStruct structEx = {typeInt, 349, 0};

或者

myStruct structEx = {typeFloat, 0, 349.349};

如果结构被声明为:你将如何做同样的事情:

typedef struct myStruct {
     Type     elementType;
     union value {
          int     valueInt;
          float   valueFloat;
     } value;   
} myStruct;

“值”将是浮点数或整数,“元素类型”允许它知道它是什么。

我知道你可以在运行时设置它:

myStruct structEx;
structEx.elementType = typeInt;
structEx.value.valueInt = 349;

但我还没有找到一种方法来使用结构进行上述操作。

提前致谢。

编辑:这是重复的。我应该一直使用“初始化”这个词,它会直接带我去那个。我的 Google-Fu 今天一定很弱。谢谢。

4

1 回答 1

3

怎么样:

myStruct structEx = {
    .elementType = 0,
    .value = {
        .valueInt = 42
    }
};

或者可能

myStruct structEx = {
    .elementType = 0,
    .value.valueInt = 42
};
于 2012-07-04T18:38:46.160 回答