为了账号安全,请及时绑定邮箱和手机立即绑定

关于c语言枚举用法

关于c语言枚举用法

C
慕的地10843 2019-10-16 09:09:25
enum string{x1,x2,x3=10,x4,x5,}x;问x= 0x801005,0x8010f4 ;以上是一个面试题目。但是我看不懂,不晓得问什么,也不知道该怎么答。能否详细讲解一下,x=0x801005,怎么来的,还有就是后面那个0x8010f4怎么来的?这个题目到底想问什么,怎么回答?
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#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:声明变量的同时赋初值

1

2

3

4

5

6

7

8

9

10

11

12

13

#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:定义类型的同时声明变量,然后对变量赋值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#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:类型定义,变量声明,赋初值同时进行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#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、对枚举型的变量赋整数值时,需要进行类型转换。

1

2

3

4

5

6

7

8

9

10

11

#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、使用枚举型变量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#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);

}

 



查看完整回答
反对 回复 2019-10-17
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

上面的问题没说清楚吧,x = 0x801005根本就会编译不过的,因为左值是枚举,右值是int

查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信