java枚举类型enum用法_C语言的枚举类型【enum】

8e3a3d8839c0d6fc85ef3f8c00be1944.png

图控大叔

构图传递思想

阅读从未如此简单!!!

01

前言

       对于C语言里面的枚举类型,小编以前有听过,好像也用过,但是对于这块内容还是有一点点模糊。所以,今天想将枚举类型的相关知识点整理出来,内容如有不足或者存在纰漏,希望读者后台留言。

02

干货

 枚举类型

关键字:enum

数据类型:整型(int)

所占内存:4字节(32位)

定义说明:

1、第一个枚举元素值在不赋值情况下,默认为0。 

2、已经赋值的枚举元素,如果后面还有枚举元素未进行赋值,则默认在此基础上加一。但是,如果后面的枚举元素有进行赋值的情况下,则需要做其他说明。

使用场合:

当一个变量只有几种可能的值。

作用:

1、简单的连续打印

2、用作函数返回错误码(重点)

03

代码:定义与声明

方式一:类型定义与变量声明分开

enum num
      {
        a,b,c,d,e,f,g
        //最后一个枚举元素后面无需加';',但是花括号需要
      };
enum num N1;
enum num N2;

方式二:类型定义与变量声明一起

//第一种情况,包含标识符num
enum num
      {
        a,b,c,d,e,f,g
      }N1;
//第二种情况,忽略标识符num
enum 
      {
        a,b,c,d,e,f,g
      }N1;

方式三:类型定义、变量声明与typedef

#include
typedef enum my_num_test
      {
        a,b,c,d,e,f,g
      }num;
//此处的num为枚举型enum my_num_test的别名

num N1;
num N2;
int main(int argc,const char **argv){
  N1 = g;
  printf("%d\n",N1);

  return 0;
}
/*
程序输出为:
6
*/

错误情况说明

1、存在同名的枚举类型变量(相同作用域情况下)

#include

enum num_1
{
  a,b,c
}N1;

enum num_2
{
  d,e,f,g
}N1;

int main(int argc,const char **argv){
  return 0;
}
/*
报错提示:
11:2: error: conflicting types for ‘N1’
6:2: note: previous declaration of ‘N1’ was here
*/

2、存在同名的枚举元素(相同作用域情况下)

#include

enum num_1
{
  a,b,c
}N1;

enum num_2
{
  a,b,c
}N2;

int main(int argc,const char **argv){
  return 0;
}
/*
报错提示:
10:2: error: redeclaration of enumerator ‘a’
5:2: note: previous definition of ‘a’ was here
10:4: error: redeclaration of enumerator ‘b’
5:4: note: previous definition of ‘b’ was here
10:6: error: redeclaration of enumerator ‘c’
5:6: note: previous definition of ‘c’ was here
*/

       看到这里,你可能会想,如果是不同的作用域,那么同名可不可以呢?答案是可以的,但是小编想说,这样子不好,别给自己挖坑好吗?以下是不同作用域的程序代码

#include

enum num_1
{
  a,b,c
}N1;

int main(int argc,const char **argv){
  
  enum num_1
  {
    a,b,c
  }N1;

  return 0;
}
/*
此时枚举类型名、枚举元素、枚举变量名都一样,
但是程序没有报错,但是小编希望你不要瞎折腾
*/

04

代码:枚举元素值打印

#include

enum num
{
  a,b=10,c
};

int main(int argc,const char **argv){
  enum num N1;
  
  N1 = a;
  printf("%d\n",N1);
  N1 = b;
  printf("%d\n",N1);
  N1 = c;
  printf("%d\n",N1);
  
  return 0;
}
/*
程序输出:
0
10
11
*/

05

代码:字节占用打印

#include

enum num
{
  a,b,c
};

int main(int argc,const char **argv){
  enum num N1;
  
  printf("%d\n",sizeof(enum num));//此处需加关键字
  
  printf("%d\n",sizeof(N1));
  
  printf("%d\n",sizeof(a));
  return 0;
}
/*
程序输出:
4
4
4
*/

06

问题讨论

1、枚举元素能否二次赋值?

答案:不能

#include

enum num
{
  a,b,c
};

int main(int argc,const char **argv){
    enum num N1;

    a = 10;//二次赋值
      
    N1 = a;
    printf("%d\n",N1);
  
    return 0;
}
/*
程序报错:
In function ‘main’:
12:5: error: lvalue required as left operand of assignment
*/

2、枚举元素能否遍历打印?

答案:简单可以,复杂不行,因为会乱

#include

enum num
{
  a,b,c,d,f
};

/*
遍历打印:简单版
*/

int main(int argc,const char **argv){
    enum num N1;

    for(N1 = a;N1<=f;N1++)
    {
      printf("%d\n",N1);
    }

    return 0;
}
/*
程序输出:
0
1
2
3
4
*/
#include

enum num
{
  a,b,c,d=8,f
};

/*
遍历打印:复杂版
*/

int main(int argc,const char **argv){
    enum num N1;

    for(N1 = a;N1<=f;N1++)
    {
      printf("%d\n",N1);
    }

    return 0;
}
/*
程序输出:
0
1
2
3
4
5
6
7
8
9
*/

3、什么是匿名枚举?(重点)

       仅定义枚举类型但是没有声明枚举变量,但是其枚举元素仍可以在算术表达式中使用,代码如下:

#include

enum 
{
  one=1,
  two=2,
  three=3,
  four=4
};
/*
匿名枚举示例
*/
int main(int argc,const char **argv){
    int i = 10;
    
    printf("%d\n",i);
    
    i = i + three;
    
    printf("%d\n",i);

    return 0;
}
/*
程序输出:
10
13
*/

07

拓展

1、枚举类型和宏定义的区别?

2、编译器对于枚举类型和宏定义的处理是否一致?

(像老师一样留两个问题,嘿嘿!)

08

结尾

       本次关于C语言中枚举类型的补充总结到这里就结束了,后期如果需要补充,再发!哈哈哈e2e048973afef44bc62e9f313fc745ba.png

      《图控大叔》,与你一起进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值