C語言趣味題目

編程語言 C語言 Python 教育 IT技術Java交流 2017-05-16

哈哈遊戲來了

點網址進去可以先做做題,溫習一下

http://stevenkobes.com/ctest.html

如果都做對了,下面就沒必要讀了意義不大

-

-

-

-

-

-

-

-

-

1可查看

https://en.wikipedia.org/wiki/Setjmp.h

C語言趣味題目

C語言趣味題目

C語言趣味題目

3沒複雜東西

C語言趣味題目

5++b的步長實際上是3個int,也就是++b運算以後,b指向{4,5,6}這個數組的開始,而b[1]就是{7,8,9}, b[1][1]實際上就是8這個值也就是main函數中的a[2][1].

6兩個C語言知識點,一個是等號操作符優先級高於逗號操作符,另一個是逗號操作符相當於運算逗號前半部後半部的表達式,然後返回後半部表達式的值。所以c等於a(先計算等號),而d等於b(逗號表達式返回b)。

7依然是2維數組相關題目,ptr為指向int [3]數組的指針,首先指向a[0],所以(*ptr)[1], (*ptr)[2]就是a[0][1], a[0][2].然後++ptr,相當於ptr指向了a[1],這時得到的是a[1][1],a[1][2],所以結果就是2,3, 5, 6。

8這裡考的是返回一個指針的問題,一般來說返回指針的函數,裡面一定有malloc之類的內存申請操作,傳入指針類型,則是對指針指向的內容做修改。如果想修改指針本身,那就要傳入指針的指針。

C語言趣味題目

10函數指針的數組p勉強算是一個知識點,另外一個知識點就是第八題提到的,對於int q這樣的參數,是不會修改其內容的。而*p則可修改p指向的內容。

11這道題自己debug一下就完全明白了,主要知識點就是遞歸調用,另外前置後置自減操作的返回值問題

12對複雜的指針定義做解析,實際上K&R裡面(5.12)也有介紹該如何解讀。不熟悉的朋友可以試著練習練習標準庫中的bsearch,qsort以及signal函數。

13這道題我在http://sunxiunan.com/?p=1637 也提到過相關知識點,也就是p實際指向*(buf + 1 + 5),寫的更詭異一些就是p=5[buf +1];也是同樣結果。

14類似上題(p += sizeof(int))[-1];相當於*(p + sizeof(int) + (-1))。

15這道題也是兩個知識點,一個是可變參數函數定義以及如何實現,va_arg會把5,7依次取出來。另一個知識點是i &= i-1,實際上是計算了i二進制形式中1的個數,每次計算都會消減掉最低有效位上的1。比如7二進制表示為111。i &= i –1的計算結果依次為110,100, 000 (也就是0)。在hacker’s Delights這本書裡介紹了很多類似技巧。

16只要瞭解靜態局部變量的真正內涵,這道題就是小菜

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群

626062078,我們一起學Python!

相關推薦

推薦中...