Dan*_*ugg 3 c enums struct pointers adt
我想知道enum在struct(inC)中使用a 的语法
我已经看过各种例子,其中struct+ union/ enum组合用于创建复杂类型,例如:
struct MyStruct{
enum{
TYPE_1,
TYPE_2,
TYPE_3,
} type;
union{
int value_1;
int value_2;
int value_3;
} value;
};
// ...
struct MyStruct test_struct;
Run Code Online (Sandbox Code Playgroud)
无论如何,从这个例子中,我将如何根据enum字段存储/测试当前的"类型" ?
如果我有指针test_struct,这似乎不起作用; 踢回未知成员错误:
struct MyStruct *test_pointer = &test_struct;
test_pointer->value = test_pointer->VALUE_1;
Run Code Online (Sandbox Code Playgroud)
我只是好奇,我是否需要将enum值作为全局值来访问?
test_pointer->value = VALUE_1;
Run Code Online (Sandbox Code Playgroud)
任何澄清将不胜感激.
这样的结构的预期用法将是这样的:
switch (test_struct.type) {
case TYPE_1:
printf("%d", test_struct.value.value_1);
break;
case TYPE_2:
printf("%d", test_struct.value.value_2);
break;
case TYPE_3:
printf("%d", test_struct.value.value_3);
break;
}
Run Code Online (Sandbox Code Playgroud)
注意大写VALUE_1,VALUE_2并且VALUE_3是不正确的,因为它们不是常量而是联合的成员.
TYPE_1,TYPE_2并且TYPE_3将是全球可访问的,不管是相应enum驻留在结构中.