日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对enum的探讨

發(fā)布時(shí)間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对enum的探讨 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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


可是這畢竟是我的猜想,對(duì)不對(duì)還要在電腦上測(cè)試一下。

view plain
  • ??

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

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


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

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


    為什么會(huì)有相同的地址呢,這個(gè)地址是什么意思呢?


    在后來的調(diào)試中,突然注意到了一個(gè)詞:constant


    是的,沒錯(cuò)就是constant!b、c、e和f其實(shí)constant,是對(duì)整形常量的取別名,這樣就可以解釋上面的一切了,
    調(diào)試的時(shí)候我輸入b和e被解釋為對(duì)應(yīng)的常數(shù)了,等于直接查看了地址。。。。。。


    好吧,現(xiàn)在來驗(yàn)證一下b、c、e和f是整形常量


    這個(gè)為b賦值為1是錯(cuò)誤的,而且說明了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;
    }


    這個(gè)程序是正確的:
    #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


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


    再來個(gè)例子
    #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;
    }


    學(xué)習(xí)中的一己之見,如有錯(cuò)誤,請(qǐng)務(wù)必指出,感謝!

    轉(zhuǎn)載于:https://www.cnblogs.com/svking/archive/2011/12/08/enum.html

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。