c语言枚举用法

enumstring{x1,x2,x3=10,x4,x5,}x;问x=0x801005,0x8010f4;以上是一个面试题目。但是我看不懂,不晓得问什么,也不知道该怎么答... enum string
{
x1,
x2,
x3=10,
x4,
x5,
}x;
问x= 0x801005,0x8010f4 ;

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

推荐于2018-04-25 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84580

向TA提问 私信TA
展开全部

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

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


  方法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);
}
匿名用户
2018-04-25
展开全部
应该是x的范围吧?确实是面试题 我也遇到了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
786228836
2013-08-07 · 超过10用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:31万
展开全部
问题确实没说清楚 x应该是内存地址吧 十六进制的
追问
对呀,题目有些慕名奇妙啊~
追答
x1=0
x2=1
x3=10
x4=11
x5=12

x=0x801005 是因为x是一个枚举的变量,而你没有初始化x
在使用x之前最好初始一下,如:x=x1;
直接百度到的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任明星Ming
2013-08-07 · TA获得超过798个赞
知道小有建树答主
回答量:1061
采纳率:100%
帮助的人:1149万
展开全部
上面的问题没说清楚吧,x = 0x801005根本就会编译不过的,因为左值是枚举,右值是int。
更多追问追答
追问
我也没明白,这个题目难道是想问  x能够取什么地址?那又怎么知道这地址是0x80100**开始的呢?
追答
那他应该是考察你int值能不能直接转为enum值吧,不然即使是将指针地址进行赋值,那也肯定会报错的,因为你根本不知道0x801005指向哪里。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式