有點意思的C/C++問題及解答:21-25

來源:互聯網
上載者:User

       問題21:判斷C編譯器是否支援嵌套注釋。

       解法:嵌套注釋是指在/* */ 中出現/* ... */,定義這個式子: /*/*/0*/**/1  。如果編譯器不支援嵌套注釋,那麼這個式子為0*1。如果支援嵌套注釋,那麼這個式子為1。摘自《C陷阱與缺陷》。

       問題22:判斷機器的大小端。

       解法:用聯合,先將其中的word賦值為0x12345678,然後列印數組bytes的元素。如果是大端,列印結果為12, 34, 56, 78;如果是小端,列印結果為78,56,34 ,12。

union endian{unsigned int word;unsigned char bytes[4];};

       問題23:用宏實現max的一個版本,其中max的參數都是整數,要求在宏max的定義中這些整型參數只被求值一次。

       解法:一般的我們會寫成這樣:

#define max(a,b) ((a)>(b)? (a): (b))

       但是這樣存在問題,如果a是i++,那麼上述宏展開後為 ((i++)>b)? (i++): (b)),i 可能會被加兩次。如何避免這種情況呢?這是本題的關鍵。

       其實如果能用內聯,寫成內嵌函式是最好的。如果非要用宏,那麼需要引入中間變數。如下定義:

static int tmp1,tmp2; #define max(a,b) (tmp1=(a),tmp2=(b),tmp1>tmp2? tmp1: tmp2)

       問題24:數組與指標的區別。

       解答:摘自《C專家編程》。

       (1)數組:儲存資料;指標:儲存資料的地址。

       (2)數組:直接存取資料;指標:間接訪問資料,首先取得指標的內容,把它作為地址,然後從地址提取資料

       (3)數組:通常用於儲存固定數目前資料類型相同的元素;指標:通常用於動態資料結構

       (4)數組:隱式分配和刪除;指標:相關的函數為malloc(),free()。

       (5)數組:自身即為資料名;指標,通常指向匿名資料。

        問題25:這個運算式能成為合法的C運算式嗎?(x) ((x)-1)。

        解答:這個運算式看似奇怪,其實也是可能的。假如之前有下面定義: typedef x int,那麼這個運算式等價與 (int) ((int)-1)。即將-1轉為int類型兩次。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.