C語言奪命十題?

2021-09-19 17:27:50 字數 4836 閱讀 6681

結構體與結構體指標

指標,陣列

巨集定義與指標函式

函式字串陣列

可變長引數函式

程式的輸出是什麼?

#include 

#include

#include

#include

int main()

b =5;

longjmp

(buf,1)

;system

("pause");

return0;

}

結果:5

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

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

程式的輸出是什麼?

int main()

struct node s =

; struct node *pt =

&s;printf

("%d\n",*

(int*

)pt)

;system

("pause");

return0;

}

結果:3

結構體成員按順序排列在記憶體中。指標強制型別轉換為其中某個成員的型別,即指向了結構體中的乙個成員,提領之後為該結構體成員變數的值。

程式的輸出是什麼?

int main()

; int *ptr =

(int*)(

&a +1)

;printf

("%d %d\n,

*(a+1)

,*(ptr-1)

);system

("pause");

return0;

}

結果:2 5

陣列a為擁有5個元素的整型,對變數名加減隱式退化為對指標的操作,a+1訪問到了陣列下標為1的元素。

&a就有成為了乙個陣列指標。因此&a + 1產生的指標越過了乙個5個陣列元素大小的陣列,剛好跳過了a陣列。此時對此指向的ptr指標進行強制型別轉換,它現在的「步距」相當於乙個陣列成員,使ptr減一指向正好回到了a陣列的最後乙個元素。

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

程式的輸出是什麼?

void

foo(int [

3]);

int main()

,,};

foo(a)

;printf

("%d\n"

,a[2][

1]);

system

("pause");

return0;

}void

foo(int b[

3])

結果: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

程式的輸出是什麼?

int main()

結果:c=3 d=5

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

程式的輸出是什麼?

#include 

int ripple

(int n,

...)

}va_end

(p);

return k;

}int main()

結果:5

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

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

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

程式的輸出是什麼?

void

f(char**);

int main()

;f(ar**)

;returno;

}void

f(char **p)

結果:cd

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

temp是什麼型別?

typedef int

(*test)

(float *

,float *);

test temp;

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

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

程式的輸出是什麼?

void

e(int)

;int main()

void

e(int n)

}

結果:0 1 2 0

在偽**中:

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

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

e(2) -> -> } ->

e(3) -> -> ->

程式的輸出是什麼?

int main()

;int

(*ptr)[3

]= a;

printf

("%d %d ",(

*ptr)[1

],(*ptr)[2

]);++ptr;

printf

("%d %d ",(

*ptr)[1

],(*ptr)[2

]);sysetm

("pause");

return0;

}

結果:2 3 5 6

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

23號第十題

小兔的叔叔從外面旅遊回來給她帶來了乙個禮物,小兔高興地跑回自己的房間,拆開一看是乙個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點 0,0 走到終點 n,n 的最短路徑數是c 2n,n 現在小兔又想如果不穿越對角線 但可接觸對角線上的格點 這樣的路徑數有多少?小兔想了很長時間都沒想出來...

學習筆記 矩陣十題

快速冪模板 define n 150 struct martix inline void build inline void clear aa martix operator const martix a,const martix b returnc martix operator martix a...

尤拉計畫 第十題

the sum of the primes below 10 is 2 3 5 7 17.find the sum of all the primes below two million.低於10的素數之和為2 3 5 7 17。找出200萬以下所有素數的總和。思路這道題與第7題的線性篩思路一樣,只...