日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

对enum的探讨

發布時間:2025/5/22 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对enum的探讨 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在看《Linux C編程一站式學習》,在83頁上看到了這么一句話“枚舉的成員名卻和變量名在同一個命名空間中,
所以會出現命名沖突”。忽然感覺C語言中枚舉是有點”貓膩“的。由于當時在圖書館所以只能先用自己這不好用的
腦袋先來猜想一下枚舉的實現:枚舉的每個成員實際是一個變量,他被賦予了相應的值,由于枚舉的每個成員
實際代表著0,1,2這樣的整數值,所以進一步猜想枚舉的每個成員是一個int類型的變量。所以有了枚舉的這些特性:
1)變量名不能和枚舉成員重名
2)枚舉成員實際對應著0,1,2這樣的整數
3)不同的成員可以對應著同一個整數(相當與int a,b;a=b=1;)


可是這畢竟是我的猜想,對不對還要在電腦上測試一下。

view plain
  • ??

  • #include <stdio.h>
    int main()
    {
    enum a {b,c};
    enum d {e,f};

    return 0;
    }
    先敲上如上的代碼(我用vc6.0,因為調試方便。。。想鄙視的就盡情的鄙視吧... )
    然后用debugger查看b和e的地址結果卻是:00000000,00000000
    地址怎么會相同呢?(其實高手估計已經猜到了怎么回事,不過我太菜,還是不明白)


    賦值一下試試
    #include <stdio.h>
    int main()
    {
    enum a {b=256,c};
    enum d {e=256,f};

    return 0;
    }
    結果b的e的地址都為00000100,還是相同。


    為什么會有相同的地址呢,這個地址是什么意思呢?


    在后來的調試中,突然注意到了一個詞:constant


    是的,沒錯就是constant!b、c、e和f其實constant,是對整形常量的取別名,這樣就可以解釋上面的一切了,
    調試的時候我輸入b和e被解釋為對應的常數了,等于直接查看了地址。。。。。。


    好吧,現在來驗證一下b、c、e和f是整形常量


    這個為b賦值為1是錯誤的,而且說明了b不是左值
    #include <stdio.h>
    int main()
    {
    enum a {b=256,c};
    enum d {e=256,f};

    int i=b;

    b=1; ? ? ? //error C2106: '=' : left operand must be l-value

    return 0;
    }


    這個程序是正確的:
    #include <stdio.h>
    int main()
    {
    enum a {b=256,c};
    enum d {e=256,f};

    enum a g=b; ? ?//b是enum a中定義的
    enum a h=e; ? ?//e是enum d中定義的!!!

    int i=b;

    printf("%d\t%d\t%d\n",g,h,i);
    return 0;
    }
    輸出:256256?? 256


    總結:其實所謂的枚舉就是對int取個別名,如enum a{};和typedef int int_;是相同的效果。而枚舉{}中的成員實際就是對相應的整形常量進行了取別名,
    就是#define b 256這樣的效果罷了。而且這些別名在對應的作用域可以和整形常量一樣使用。


    再來個例子
    #include <stdio.h> ?//改程序沒有問題(vc6.0和codeblocks)
    #define one 1
    int main()
    {
    enum a {b=256,c=one};
    enum d {e=256,f};
    typedef int int_;


    int_i;
    enum a?j;
    intk;


    i=e;
    j=e;
    k=e;


    i=j;
    j=i;
    k=j;
    j=k;
    i=k;
    k=i;


    i=0;
    j=0;
    k=0;
    return 0;
    }


    學習中的一己之見,如有錯誤,請務必指出,感謝!

    轉載于:https://www.cnblogs.com/svking/archive/2011/12/08/enum.html

    總結

    以上是生活随笔為你收集整理的对enum的探讨的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。