幾道C語言題目,有興趣的可以自己動手試試

來源:互聯網
上載者:User
最近學習C語言知識,從網上收集了一些內容,自己也總結了一些,感覺這幾題有點意思,有興趣的可以自己試試:
1、位元組對齊問題:
#pragma pack(4)
typedef struct _S_1
{
    char a;            
    long b;            
    char c;            
}S_1;
#pragma pack()

#pragma pack(2)
typedef struct _S_2
{
    char a;        
    S_1 b;        
    long c;        
    char d;        
}S_2;
#pragma pack()

問:sizeof(S_2)為多少?
展開,上面有兩個pack(N),隨意修改這個N,結果又會是什嗎?例如:一個是1,一個是4,兩個都是4,兩個都是1,或者其它任意組合,結果是多少?
最簡單的方法是上機去試試,但也要明白原理!

2、位域問題:#pragma pack(1)
typedef union _Message
{
    long Result;
    struct _Data
    {
        char a;
        short b:1;
        short c:2;
        short d:3;
        short e:4;
        short f:6;
        char g;
    }Data;
} Message;
#pragma pack()
int main()
{    
    Message m_msg;
    m_msg.Data.a = 0x01;
    m_msg.Data.b = 0x02;
    m_msg.Data.c = 0x03;
    m_msg.Data.d = 0x04;
    m_msg.Data.e = 0x05;
    m_msg.Data.f = 0x06;
    m_msg.Data.g = 0x07;
    //printf("%d\n",sizeof(Message));
    printf("%0.8X\n",m_msg.Result);
    return 0;
}

問:在小位元組序下,結果是多少?在大位元組序下,結果又是多少?
如果不明白什麼是位元組序,那就直接回答,在Intel的CPU下結果是多少就行了。
注意:這裡必須使用pack(1),否則結果並不是預期的樣子。而且b,c,d,e,f,必須定義成short,如果不是short是其它的資料類型,結果又會不一樣!

兩個問題都可以在VC下進行測試,有興趣的自己動手試試,體會一下!
第二題無法示範在大位元組序下的情況,因此無法示範結果,只能看理論上解答!

答案(最好是自己理論求解再來用VC來驗證):
1:20
2:07196601(小位元組序);01714607(大位元組序)
     
應用情境:不要覺得這樣的題目很變態,實際上它的應用情境是很多!
例如一個乙太網路的框架格式,它有2個48bit的MAC地址,還有一些報文類型,用4個bit來表示,還有其它的一些資訊,都不是用byte來表示的,而是用幾個bit表示。如何定義這樣的乙太網路框架格式,就會與上面的問題相關了。而且網路中傳輸的資料是採用的大位元組序,而我們一般的PC機,或者說是相容Intel CPU的機器,都是小位元組序,所以要注意轉化一下,否則定義出來的結構也並不是我們想要的。
而位元組對齊的應用在網路的訊息報文中也經常遇到。但一般情況下都是採用的自然對齊,這樣在網路中進行資料交換時,如果採用的對齊不一致,可能出現資料對齊的問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.