我们可以在c中类型转换枚举变量吗

我们可以在c中类型转换枚举变量吗,c,C,我在采访中被问到这个问题: 是否可以将枚举变量类型转换为其他类型 我真的不知道怎么回答。是的。在Cenum中,类型仅为ints。你想怎么打就怎么打 enum cardsuit { Clubs = 1, Diamonds, Hearts, Spades }; enum cardsuit trump = Diamonds; int d = (int)trump; /* 'd' would be 2 */ C中的任何enum表达式都可以转换为任何算术类型,即任何排序和指针

我在采访中被问到这个问题:

是否可以将枚举变量类型转换为其他类型


我真的不知道怎么回答。

是的。在C
enum
中,类型仅为
int
s。你想怎么打就怎么打

enum cardsuit {
   Clubs = 1,
   Diamonds,
   Hearts,
   Spades
}; 
enum cardsuit trump = Diamonds;
int d = (int)trump;  /* 'd' would be 2 */

C中的任何
enum
表达式都可以转换为任何算术类型,即任何排序和指针的整数或浮点。例如,这在C中有效:

const enum { nullpointer } nullpointer_variable = nullpointer;

unsigned *p = nullpointer;           // initialization with an int
unsigned *p = nullpointer_variable;  // initialization with an enum expression

大多数时候,您甚至不需要显式强制转换。

为什么不尝试一下,看看会发生什么?是的,这是一个不错的选择@Paul let me try
enum
s是二流类型。它们实际上是某种整数类型。任何可以将
int
强制转换为的对象,都可以强制转换
enum
<代码>枚举x{A,B,C=42};enum x someenum=17;printf(“%d%f\n”,someenum,(double)someenum)intlossless@Christoph-这正是我关于整型的观点。为了进一步说明,我当前的编译器(C99、嵌入式RTOS、ARM9)提供了一个--short枚举构建设置,它将生成一个字节或两个字节的枚举(与最直接映射到int的四字节枚举相反)。