新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C語言試題大全五

        C語言試題大全五

        作者: 時間:2016-11-24 來源:網絡 收藏
        1. 分析:
        struct bit
        { int a:3;
        int b:2;
        int c:3;
        };
        int main()
        {
        bit s;
        char *c=(char*)&s;
        cout< *c=0x99;
        cout << s.a < int a=-1;
        printf("%x",a);
        return 0;
        }
        輸出是什么?

        答案:
        4
        1
        -1
        -4
        ffffffff
        因為0x99在內存中表示為 100 11 001 , a = 001, b = 11, c = 100
        當c為有符合數時, c = 100, 最高1為表示c為負數,負數在計算機用補碼表示,所以c = -4;同理
        b = -1;
        當c為有符合數時, c = 100,即 c = 4,同理 b = 3

        位域 :
        有些信息在存儲時,并不需要占用一個完整的字節,而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省存儲空間,并使處理簡便,C語言又提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域,并說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。一、位域的定義和位域變量的說明位域定義與結構定義相仿,其形式為:
        struct 位域結構名
        { 位域列表 };
        其中位域列表的形式為: 類型說明符位域名:位域長度
        例如:
        struct bs
        {
        int a:8;
        int b:2;
        int c:6;
        };
        位域變量的說明與結構變量說明的方式相同。可采用先定義后說明,同時定義說明或者直接說明這三種方式。例如:
        struct bs
        {
        int a:8;
        int b:2;
        int c:6;
        }data;
        說明data為bs變量,共占兩個字節。其中位域a占8位,位域b占2位,位域c占6位。對于位域的定義尚有以下幾點說明:
        1. 一個位域必須存儲在同一個字節中,不能跨兩個字節。如一個字節所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:
        struct bs
        {
        unsigned a:4
        unsigned :0 /*空域*/
        unsigned b:4 /*從下一單元開始存放*/
        unsigned c:4
        }
        在這個位域定義中,a占第一字節的4位,后4位填0表示不使用,b從第二字節開始,占用4位,c占用4位。
        2. 由于位域不允許跨兩個字節,因此位域的長度不能大于一個字節的長度,也就是說不能超過8位二進位。
        3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:
        struct k
        {
        int a:1
        int :2 /*該2位不能使用*/
        int b:3
        int c:2
        };
        從以上分析可以看出,位域在本質上就是一種結構類型,不過其成員是按二進位分配的。
        二、位域的使用位域的使用和結構成員的使用相同,其一般形式為:位域變量名位域名位域允許用各種格式輸出。
        main(){
        struct bs
        {
        unsigned a:1;
        unsigned b:3;
        unsigned c:4;
        } bit,*pbit;
        bit.a=1;
        bit.b=7;
        bit.c=15;

        2.int (*s[10])(int) 表示的是什么
        答案:
        int (*s[10])(int) 函數指針數組,每個指針指向一個int func(int param)的函數。
        3. c和c++中的struct有什么不同?
        答案:
        c和c++中struct的主要區別是c中的struct不可以含有成員函數,而c++中的struct可以。c++中struct和class的主要區別在于默認的存取權限不同,struct默認為public,而class默認為private


        關鍵詞: C語言試題大

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 澳门| 葵青区| 孟村| 竹溪县| 宜君县| 道真| 卓资县| 平顺县| 西藏| 龙州县| 绵竹市| 英山县| 庄河市| 塔城市| 田阳县| 卢龙县| 咸宁市| 牡丹江市| 南投市| 塔河县| 临桂县| 集安市| 日照市| 云梦县| 巍山| 安吉县| 金坛市| 彭山县| 永寿县| 卓尼县| 普安县| 泽库县| 堆龙德庆县| 兰溪市| 永新县| 杭锦后旗| 双辽市| 丹凤县| 青岛市| 进贤县| 深泽县|