c语言枚举用法

enum string
{
x1,
x2,
x3=10,
x4,
x5,
}x;
问x= 0x801005,0x8010f4 ;

以上是一个面试题目。但是我看不懂,不晓得问什么,也不知道该怎么答。
能否详细讲解一下,x=0x801005,怎么来的,还有就是后面那个0x8010f4怎么来的?这个题目到底想问什么,怎么回答?

  一、对枚举型的变量赋值。

  实例将枚举类型的赋值与基本数据类型的赋值进行了对比:


  方法1:先声明变量,再对变量赋值

#include<stdio.h>
/* å®šä¹‰æžšä¸¾ç±»åž‹ */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
    /* ä½¿ç”¨åŸºæœ¬æ•°æ®ç±»åž‹å£°æ˜Žå˜é‡ï¼Œç„¶åŽå¯¹å˜é‡èµ‹å€¼ */
    int x, y, z;
    x = 10;
    y = 20;
    z = 30;
    /* ä½¿ç”¨æžšä¸¾ç±»åž‹å£°æ˜Žå˜é‡ï¼Œå†å¯¹æžšä¸¾åž‹å˜é‡èµ‹å€¼ */
    enum DAY yesterday, today, tomorrow;
    yesterday = MON;
    today     = TUE;
    tomorrow  = WED;
    printf("%d %d %d \n", yesterday, today, tomorrow);
}


  方法2:声明变量的同时赋初值


#include <stdio.h>
/* å®šä¹‰æžšä¸¾ç±»åž‹ */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
    /* ä½¿ç”¨åŸºæœ¬æ•°æ®ç±»åž‹å£°æ˜Žå˜é‡åŒæ—¶å¯¹å˜é‡èµ‹åˆå€¼ */
    int x=10, y=20, z=30;
    /* ä½¿ç”¨æžšä¸¾ç±»åž‹å£°æ˜Žå˜é‡åŒæ—¶å¯¹æžšä¸¾åž‹å˜é‡èµ‹åˆå€¼ */
    enum DAY yesterday = MON, 
                        today = TUE,
                      tomorrow = WED;
    printf("%d %d %d \n", yesterday, today, tomorrow);
}

  方法3:定义类型的同时声明变量,然后对变量赋值。

#include <stdio.h>
/* å®šä¹‰æžšä¸¾ç±»åž‹ï¼ŒåŒæ—¶å£°æ˜Žè¯¥ç±»åž‹çš„三个变量,它们都为全局变量 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;
/* å®šä¹‰ä¸‰ä¸ªå…·æœ‰åŸºæœ¬æ•°æ®ç±»åž‹çš„变量,它们都为全局变量 */
int x, y, z;
void main()
{
    /* å¯¹åŸºæœ¬æ•°æ®ç±»åž‹çš„变量赋值 */
    x = 10;  y = 20;  z = 30;
    /* å¯¹æžšä¸¾åž‹çš„变量赋值 */
    yesterday = MON;
    today     = TUE;
    tomorrow  = WED;
    printf("%d %d %d \n", x, y, z); //输出:10 20 30
    printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}

  方法4:类型定义,变量声明,赋初值同时进行。

#include <stdio.h>
/* å®šä¹‰æžšä¸¾ç±»åž‹ï¼ŒåŒæ—¶å£°æ˜Žè¯¥ç±»åž‹çš„三个变量,并赋初值。它们都为全局变量 */
enum DAY
{
    MON=1, 
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN 
}
yesterday = MON, today = TUE, tomorrow = WED;
/* å®šä¹‰ä¸‰ä¸ªå…·æœ‰åŸºæœ¬æ•°æ®ç±»åž‹çš„变量,并赋初值。它们都为全局变量 */
int x = 10, y = 20, z = 30;
void main()
{
    printf("%d %d %d \n", x, y, z); //输出:10 20 30
    printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}

  2、对枚举型的变量赋整数值时,需要进行类型转换。

#include <stdio.h>
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
    enum DAY yesterday, today, tomorrow;
    yesterday = TUE;
    today = (enum DAY) (yesterday + 1); //类型转换
    tomorrow = (enum DAY) 30; //类型转换
    //tomorrow = 3; //错误
    printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30
}

  3、使用枚举型变量

#include<stdio.h>
enum

    BELL          = '\a',
    BACKSPACE = '\b',
    HTAB         = '\t',
    RETURN      = '\r',
    NEWLINE    = '\n', 
    VTAB         = '\v',
    SPACE       = ' '
};
enum BOOLEAN { FALSE = 0, TRUE } match_flag;
void main()
{
    int index = 0;
    int count_of_letter = 0;
    int count_of_space = 0;
    char str[] = "I'm Ely efod";
    match_flag = FALSE;
    for(; str[index] != '\0'; index++)
        if( SPACE != str[index] )
            count_of_letter++;
        else
        {
            match_flag = (enum BOOLEAN) 1;
            count_of_space++;
        }
printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);
    printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-25
应该是x的范围吧?确实是面试题 我也遇到了
第2个回答  2013-08-07
问题确实没说清楚 x应该是内存地址吧 十六进制的追问

对呀,题目有些慕名奇妙啊~

追答

x1=0
x2=1
x3=10
x4=11
x5=12

x=0x801005 是因为x是一个枚举的变量,而你没有初始化x
在使用x之前最好初始一下,如:x=x1;
直接百度到的

第3个回答  2013-08-07
上面的问题没说清楚吧,x = 0x801005根本就会编译不过的,因为左值是枚举,右值是int。追问

我也没明白,这个题目难道是想问 x能够取什么地址?那又怎么知道这地址是0x80100**开始的呢?

追答

那他应该是考察你int值能不能直接转为enum值吧,不然即使是将指针地址进行赋值,那也肯定会报错的,因为你根本不知道0x801005指向哪里。

追问

(⊙o⊙)…不知题目所云~

追答

以后遇到这种面试题时,不太清楚题目的意思时,可以多问问面试官,没多大关系的。。。

本回答被提问者采纳

c语言枚举类型enum用法
C语言中的枚举类型(enum)用法详解:1. 枚举类型是一组命名的整型常量,这些常量构成了一个集合。集合中的元素(枚举成员)通过逗号分隔。2. `DAY`是一个自定义的标识符,用作枚举集合的名称,这一点是可选的。3. 枚举成员的值从0开始,后续成员的值自动递增。如果未显式赋值,每个成员的值将默认...

C语言——枚举enum
C语言中的枚举enum是一种强大的工具,它为一组离散值提供了一种明确而简洁的表示方式,提升代码可读性。要创建枚举,首先使用关键字enum,接着指定一个唯一的名字,再用大括号包含一系列的常量,每个常量可以用标识符标识,也可赋予整数值。如果没有指定,系统会自动生成从0开始的递增序列。枚举的语法如...

enum在c语言中怎么用?
1. 枚举类型实质上是一组整型常量的集合。这些常量称为枚举成员,它们之间的值默认从0开始,依次递增。2. 枚举类型以enum开头,后跟一个可选的类型名,例如enum DAY。类型名可以看作是枚举集合的标签,它不是必须的,但通常为了代码的清晰和可维护性而使用。3. 枚举成员可以显式地为某个整数值进行赋...

C语言 enum(枚举)
在C语言中,枚举通常被视为int或unsigned int类型,不支持直接遍历。但可以通过条件处理实现部分枚举遍历。在switch语句中,枚举可方便地对应不同的情况:在switch中使用:enum color { red=1, green, blue }; ...总之,枚举是C语言中提升代码可读性和组织性的有力工具。要深入学习编程,欢迎加入玛可...

enum在c语言中是什么意思?
1. 枚举类型的定义 在C语言中,enum是一个关键字,用于定义枚举类型。枚举类型是一种数据类型,它允许用户为整数值定义命名的常量集合。这些常量通常表示某些固定的、预定义的整数值。使用枚举类型可以增加代码的可读性和可维护性。2. 枚举类型的用法 通过enum定义的枚举类型包含一组命名的常量值。每个值...

枚举类型enum用法c语言switch的用法是什么
enum EnumName { EnumValue1,EnumValue2,\/\/ ...};```这里,`EnumName` 是枚举类型的名称,它之后跟着一对花括号,括号内是枚举值,用逗号分隔。每个枚举值都是该类型的一个实例。3、C语言中的 `switch` 语句是一种多分支选择结构,它允许基于不同的情况执行不同的代码块。`switch` 语句使用...

C语言中关于枚举类型
在C语言中,枚举值是常量,不能被重新赋值。例如,尝试对枚举元素进行赋值,如`sun=5`或`sun=mon`,都是不允许的。正确的方式是将枚举值赋给枚举变量,如`a=sun`。另外,虽然枚举元素有自己的数值,但它们不是字符常量,不能直接用数字赋值,需要通过强制类型转换,如`a=(enum weekday)2`等同于...

C语言丨关键字enum用法详解,看这篇就够了
详解C语言关键字enum的使用枚举(enum)是C语言中的一种重要数据类型,它简化了整数常量的命名,提高代码可读性。它是一种预处理指令#define的替代,但与宏不同,枚举在编译阶段将标识符转换为指定的整数值。枚举的定义格式如下:enum typeName { valueName1, valueName2, ... };typeName是枚举类型名...

c语言中enum类型的用法!
1. enum weekday{ sun,mou,tue,wed,thu,fri,sat } 2. enum weekday a,b,c;3. enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;枚举类型变量的赋值和使用:1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值:sun=5; mon=2; sun=...

c语言枚举类型enum用法
c语言枚举类型enum用法如下:(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。(2)DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。在当前值没...

相似回答