zoukankan      html  css  js  c++  java
  • 枚举

     1 *#include<stdio.h>
     2 #define Mon 1
     3 #define Tue 2
     4 #define Wed 3
     5 #define Thu 4
     6 #define Fri 5
     7 #define Sat 6
     8 #define Sun 7
     9 int main()
    10 {
    11     int n;
    12     scanf("%d",&n);
    13     switch(n){
    14         case Mon: puts("Monday"); break;
    15         case Tue: puts("Tuesday"); break;
    16         case Wed: puts("Wednesday"); break;
    17         case Thu: puts("Thursday"); break;
    18         case Fri: puts("Friday"); break;
    19         case Sat: puts("Saturday"); break;
    20         case Sun: puts("Sunday"); break;
    21         default: puts("Error!"); 
    22     }
    23     return 0;
    24 }
     1 #include<stdio.h>
     2 
     3 enum week{Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};
     4 int main()
     5 {
     6     enum week n;
     7     scanf("%d",&n);
     8     switch(n){
     9         case Mon: puts("Monday"); break;
    10         case Tue: puts("Tuesday"); break;
    11         case Wed: puts("Wednesday"); break;
    12         case Thu: puts("Thursday"); break;
    13         case Fri: puts("Friday"); break;
    14         case Sat: puts("Saturday"); break;
    15         case Sun: puts("Sunday"); break;
    16         default: puts("Error!"); 
    17     }
    18     return 0;
    19 }

    注意

    1) 枚举列表中的 Mon、Tue、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。

    2) Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。

    枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。

    对于上面的代码,在编译的某个时刻会变成类似下面的样子:

     1 #include<stdio.h>
     2 
     3 enum week{Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};
     4 int main()
     5 {
     6     enum week n;
     7     scanf("%d",&n);
     8     switch(n){
     9         case 1: puts("Monday"); break;
    10             case 2: puts("Tuesday"); break;
    11             case 3: puts("Wednesday"); break;
    12             case 4: puts("Thursday"); break;
    13             case 5: puts("Friday"); break;
    14             case 6: puts("Saturday"); break;
    15             case 7: puts("Sunday"); break;
    16             default: puts("Error!"); 
    17     }
    18     return 0;
    19 }        

    Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tue、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。这就是枚举的本质。

    天涯犹在,不诉薄凉。
  • 相关阅读:
    iOS最笨的办法实现无限轮播图(网络加载)
    iOS 动画基础总结篇
    ios 深入讲解iOS键盘一:控制键盘隐藏显示
    iOS开发之提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package
    ios -仿微信有多级网页时,显示返回跟关闭按钮
    IOS启动页动画(uiview 淡入淡出效果 )2
    数量加减
    Swift泛型协议的N种用法
    一个swift版简单的用户名和密码输入textField
    Mac电脑上怎么设置环境变量
  • 原文地址:https://www.cnblogs.com/Knight02/p/14008880.html
Copyright © 2011-2022 走看看