【c++】枚举应用举例和const关键字用法

枚举的用法

1 . 如果一个变量只有几种可能的值,则可以定义为“枚举类型”;所谓“枚举”就是把可能的值一一的列举出来,变量的值只限于列举出来的值的范围。如:

	语法:
	enum 枚举类型{枚举成员列表};
	//其中的枚举成员列表是以逗号“,”相分隔
	如:
    enum color{red,black,yellow,blue,white};
    enum Spectrum{red,black,yellow,blue,white};
    其中:enum为关键字, color为该枚举类型的标记名(标记名:遵循标识符的命名规则);
    花括号“{}”中的red,black,yellow,blue,white称为“枚举元素”或“枚举常量”;

2.有关枚举类型常量的默认值
这里仍然拿上面的枚举类型常量作为示例:

    enum color{red,balck,yellow,blue,white};
                   0    1     2     3     4 
默认情况下:该枚举列表中的常量值分别为:0,1,2,3,4

当然也可以在枚举声明中,可以为枚举常量指定整数值:如

   enum Spectrum{red=10,balck=20,yellow=30,blue=40,white=50};

也可以只对枚举类型中的一个枚举元素赋值;这时该枚举元素后面的枚举元素会被赋予后续的值。如:

    enum Spectrum{red,balck=22,yellow,blue,white};
    
  则:red=0,black=22,yellow=23,blue=24,white=25;

 

匿名的枚举类型会有着意想不到的作用,比如在程序中需要使用数值的名字的时候,常常有3种方法可以实现。
(1)宏定义

#define FALSE 0
#define TRUE  1

但是宏定义有弱点:其定义的只是预处理阶段的名字,在编译器的预处理阶段会进行简单的名字替换,而且不会进行类型的安全检查,其作用域是全局的,因此若程序中有变量true、false,则会被替换。为了避免这样的情况,采用将全部的宏用大写来命名,以区别于正常的代码。

2)匿名的enum枚举

enum {FALSE,TRUE};		//FALSE 0, TRUE 1

(3)采用静态变量

c++中更加推荐使用该方式,如:

static const int FALSE = 0;
static const int TRUE = 1;

在这里的TRUE,FALSE同样会得到编译器在编译阶段的检查。由于是静态变量,因此其作用域被限制到了本文件内。相比于enum枚举类型,静态变量不仅是编译时期的名字,同时编译器还可能会在代码中为TRUE,FALSE产生实际的数据,这会增加一点存储空间。

5.枚举类型的作用:提高程序的可读性和可维护性;

示例代码一:输出12个月的英文单词

#include<stdio.h>
#include <stdlib.h>
enum Months{jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};
int main(void)
  {
  enum Months m;
    //flag用来标记输出的个数,若为4个,则输出一个换行符
  int flag=0;  
    //指针数组,存放的是个字符串的入口地址
  char *months[]={"January","February","March","April","May","June",
        "July","August","September","October","November","December"};
  for (m=jan;m<=dec;m++)
  {
    printf ("%-d月份:%-10s ",m,months[m-1]);
    flag++;
    if (flag%4==0)
    {
      putchar('\n');
    }
  }
  system ("pause");
  return 0;
  }

 const关键字的用法

const定义常变量后,该变量没有写权限,只有读权限

①const用于定义常变量时,要进行初始化

例如:

const int a=10; //合法

const int a;  //非法

②数据类型对于const而言是透明的

例如:

const int a=10;   等价于 int const a=10;

const int *p1=&a;等价于int const *p1=&a;   但不等价于int *const  p1=&a;

③const用于封锁直接修饰的内容,该内容变为只读,该变量不能作为左值(左值:放在赋值号‘=’的左边,使用变量的写权限)

例如:

1)

const int a=10;//const封锁a

a=100; //a作为左值,使用a的写权限,非法

int b=a; //使用a的读权限,合法

2)const int *p1=&a; //const修饰*p1,将p1作为左值合法,将*p1作为左值非法例(const直接修饰谁它的左值就非法)

p1=&b; //使用p1做左值,合法

*p1=200;//使用*p1做左值,非法

3)int * const p2=&a; //const修饰p2,将p2作为左值非法,将*p2作为左值合法

例:

p2=&b;//使用p2做左值,非法

*p2=100;//使用*p2做左值,合法

4)const int * const p3=&a;//const分别修饰*p3,p3,将*p3,p2作为左值都非法例:

p3=&b;//使用p3做左值,非法

*p3=100;//使用*p3做左值,非法

5)权限只能同等传递或者缩小传递
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值