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 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。这就是枚举的本质。

    天涯犹在,不诉薄凉。
  • 相关阅读:
    解决Linux中Too many open files问题
    10个必需的iOS开发工具和资源
    @ModelAttribute跟@SessionAttributes的应用
    7个改变世界的Java项目
    Java序列化与反序列化
    微软推出“IE9梦幻任务栏Pin计划”
    java中replace和replaceAll的区别
    【转】hibernate中annotation方式SchemaExport无法生成表的原因(ORA02261)
    permgen space报错
    em和px
  • 原文地址:https://www.cnblogs.com/Knight02/p/14008880.html
Copyright © 2011-2022 走看看