c语言中的枚举?它们可以用来储存吗

c语言中的枚举?它们可以用来储存吗,c,enums,enumeration,C,Enums,Enumeration,我试图找出如果枚举中有2个变量会发生什么 我给它赋值。 我想了解一下,当我给c_类型赋值时,使用的是C1还是C2 我有以下代码: typedef enum { C1 = 0, C2, } c_type; typedef struct A_a { c_type store; } A; FuncABC(int val) { A a1; a1.store = val; /here store has C1 and C2, which one gets use

我试图找出如果枚举中有2个变量会发生什么 我给它赋值。 我想了解一下,当我给c_类型赋值时,使用的是C1还是C2

我有以下代码:

typedef enum {
    C1 = 0,
    C2,
} c_type;

typedef struct A_a {
    c_type store;
} A;

FuncABC(int val)
{
    A a1;
    a1.store = val; /here store has C1 and C2, which one gets used here?
}
请告诉我。我知道上面的代码在C语言中逻辑地工作。
但是,我想澄清一下作业。

这是未定义的行为。代码最有可能导致崩溃,因为您正在取消对未初始化指针的引用。

您混淆的是
a1。store
将存储
C1
C2

实际上
a1。存储
可以是
C1
C2
2
3
255
val
的任何值

回到C标准,
enum
变量可以存储超出
enum
类型值范围的值


您也可以参考此

谢谢sam的回答。请帮我澄清一下枚举上的赋值操作。此赋值操作与任何其他赋值操作没有区别。它用一个新值替换某物的先前值。是的,但是,在哪个枚举中?C1还是C2?存储为C1和C2。只有一个枚举值。您将枚举与结构相混淆。枚举是一个别名。举例来说,枚举不是说这个整数的值只能是0、1或2,而是说这个整数的值只能是C1、C2或C3。使用C1、C2或C3与使用分配给每个枚举的基础整数值完全相同。谢谢,这是一个愚蠢的问题;)。我弄糊涂了。它将存储
val
的值。我知道,但它将存储在什么中?它将存储在
a1中。存储在
中。在C中,a1.store基本上是一个整数,你的枚举基本上是用一些额外的编译时间定义的,除非枚举值超过INTMAX(然后它是最小值的整数类型,它适合于最大值),或者使用编译器特定的“打包”属性。C++对Type Debug EnMs做了一些处理,如果某个东西传递了一个值1或0,它可能会给上面的赋值提供一个警告/错误。这就是为什么使用<代码>开关不一定没有意义的原因。(a1.store){case C1:…;case C2:…;default:…句柄超出范围…;}
即使不应执行
default
case,如果
val
不是枚举中的值,也可能会执行。