1. 程式人生 > >C語言奪命題十例,為啥C語言的總是這麼惡趣味?

C語言奪命題十例,為啥C語言的總是這麼惡趣味?

前言

這些問題測試了C語言的高階知識,包括一些很少使用的特性。有效的C程式設計需要對諸如未定義的行為,遞迴和指標算術等概念有深入的理解,但是這些故意複雜的例子並不代表現實世界的程式碼,當然也不會為了清晰和可維護性而獲得任何獎勵。

在這些問題上的表現不是一個更好的軟體開發能力指標。因此,他們不太可能在面試環境中有用。(學校貌似就喜歡做這樣的事情,哈哈)。

主要內容

如果你是大學生,保證這道題你就會喪命,不是小編危言聳聽。

1.如圖所示程式的輸出是什麼?

漲姿勢:

結果:5

該setjmp函式儲存“非本地goto”的上下文資訊,返回0.該longjmp函式將控制轉移到已setjmp初始化的呼叫buf,並且從這一點繼續執行,就好像setjmp返回了1。

注意:之後被修改的非易失性自動變數setjmp變得不確定longjmp。沒有volatile限定詞,這個程式的行為將是不確定的。這個規則允許更好的程式碼優化。

好了接著給你來點接地氣的題吧,如果你結構體學的不錯,我想這題應該沒什麼難度

小編給大家推薦一個學習氛圍超好的地方,C/C++交流企鵝裙:870963251!適合在校大學生,小白,想轉行,想通過這個找工作的加入。裙裡有大量學習資料,有大神解答交流問題,每晚都有免費的直播課程

2.如圖所示程式的輸出是什麼?

漲姿勢:

結果:3

struct 的成員按順序排列在記憶中。如果指向a的指標轉換struct為指向其第一個成員的指標的型別,則結果指向其第一個成員。

3.如圖所示程式的輸出是什麼?

漲姿勢:

結果:2 5

既然a有型別陣列[5]了,int,&a就有型別指標陣列[5]了int。因此&a + 1產生的指標(不存在)陣列[5]的int自帶後a,並ptr指向(不存在)int附帶之後a。從中減去1 ptr產生一個指向最後一個元素的指標a。

注意:一般來說,不能使用非空指標的值不指向有效的物件。但是,指向陣列末尾的指標是一個例外。這使ptr合法的初始化,即使它不能被解除引用。

4.如圖所示程式的輸出是什麼?

漲姿勢:

結果:9

在中foo,b有指向陣列[3]的型別指標int,並在增量後指向陣列a[1]()。所以b[1]有型別陣列[3] int,它表示陣列a[2]()。在值上下文中,b[1]“decay”成一個指向a[2][0](7)的指標,所以b[1][1]表示a[2][1],其值從8變為9。

好了看了上面4題也辛苦閱讀的你了,接下來做個基礎不過的程式了。

5.如圖所示程式的輸出是什麼?

漲姿勢:

結果:c=3 d=5

逗號運算子評估兩個運算元並生成第二個值。它的優先順序也低於賦值。因此c = a, b相當於c = a,而d = (a, b)相當於d = b。

好了看這麼多了,我們不妨研究點有意思的新東西,在C++11 標準中有可變長引數的函式,接下來就看一看這樣的使用。

如果你能耐心看題到這裡,說明你是一位非常專注與C/C++的學習者或者成功者,有興趣不妨關注程式碼下的學習場所。

6.如圖所示程式的輸出是什麼?

漲姿勢:

結果:5

該va_arg巨集產生的“傳遞引數...”一個可變引數函式的一部分。在ripple它將被呼叫兩次,i首先設定為5,然後到7。

表示式i &= i - 1重置最右邊的1位i。例如,如果i是6(二進位制110),i & i - 1則是4(二進位制100)。內部for迴圈執行到i0,所以k增加了1位的數量i。

5(二進位制101)和二進位制111(二進位制)中有兩個1位,所以ripple返回5。

7.如圖所示程式的輸出是什麼?

漲姿勢:

結果:cd

在f,p最初指向指標陣列中的第一個char*("ab")argv。新增sizeof(int)= 2 p使其指向第三個char*("ef"),之後p[-1]表示第二個char*("cd")。

8.如圖所示temp是什麼型別?

這題其實很簡單,不過一般大學生很少看到

漲姿勢:

結果:指向函式的指標取兩個指標float引數並返回int

該typedef宣告為一個型別建立一個同義詞,然後可以用它來宣告該型別的物件。注意這個型別的新名字出現在一個變數名的位置上,好像你正在宣告一個變數(你不知道)。與#define指令的語法相比,這可以使其看起來倒退。

9.如圖所示程式的輸出是什麼?

漲姿勢:

結果:0 1 2 0

在虛擬碼中(接觸下虛擬碼吧)

e(0), e(-1) -> {}

e(1) -> -> {{}, print 0, {}} ->

e(2) -> -> {, print 1, {}} ->

e(3) -> -> {, print 2, } ->

10.如圖所示程式的輸出是什麼?

漲姿勢:

結果:2 3 5 6

在這裡,a有陣列[3]的型別陣列[2] int,ptr最初指向第一個陣列[3]()。增量後,它指向第二個陣列[3]()。當然,*ptr表示ptr正好指向的陣列[3] 。

總結

個人總結

涉及高階部分內容總結:

1.結構體與結構體指標

2.指標,陣列

3.巨集定義與指標函式

4.函式

5.字串陣列

6.可變長引數函式