那些年我們遇到的c面試題

2021-06-16 11:18:59 字數 1147 閱讀 5439

1.這是一道關於結構體對齊補齊的題;

在32為ibm-pc機上使用c語言,若有如下定義:

structaa;

則變數a所占用的位元組數和成員布局為 (c:char,s:short,i:int,x:填充位元組)。

a.9,cssssiiii

b.10,cxssssiiii

c.12,cxssssxxiiii

d.12,c***ssssiiii

分析:

c語言中結構所佔記憶體理論上來說是各成員的記憶體量之和,但還有他獨有的規則(對齊補齊);

所謂對齊,就是成員記憶體的起始位址必然是他自身所佔記憶體的整數倍;

補齊,則是指結構的記憶體總量是最大成員的整數倍,最大成員超過4位元組的按4位元組算.

根據上面的原則, 布局為cxssssxxiiii 總共12位元組, 所以c為正確答案.

2.關於位與運算

int x = 9999,y;

for(y = 0; x; y++)

x = x & (x - 1)

printf("%d\n", y);

輸出是?

分析:9999 二進位制 10011100001111

第一次&(x-1)將最右邊的1置零

第一次&(x-1)將右邊第二個1置零

依次類推

直到x變成0

所以x有幾個1就會有幾次位與運算

所以9999總共要進行8次位與運算。

3.關於型別提公升(integer promotion)

unsigned char a = 0xa5;

unsigned char b = ~a>>1+2+3;

printf("%d\n", b);

輸出結果是?

這道題的最終結果是253. 剛開始我百思不得其解,後來我在論壇上發了個類似的帖子求助,在高手的指導下

我終於明白了其中的道理;

分析:~a的結果被提公升為int (4位元組) 即:0xffffff5a

然後右移6位:即為:0xfffffffd

再轉為unsigned char  為:0xfd==>253.

那些年奇葩的面試題

結構和類的區別 1.儲存型別 結構是值型別,儲存在棧上。類是引用型別,儲存在棧上和堆上,堆上儲存真實資料,棧上儲存儲存位址,修改乙個引用的值,另乙個相同的引用的值就會發生改變。2.繼承性 類是可以繼承的,它可以繼承其他的類或者介面,也可以被繼承,並且,類的許多特性是通過繼承來展現的,要阻止類的繼承,...

那些年面試遇到的坑

在非同步模式下,當我們使用ajax傳送完請求後,可能還有 需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含ajax請求 的函式中的剩餘 將繼續執行。如果我們是將請求結果交由另外乙個js函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣...

遇到的android面試題

1 簡述android中實現多執行緒的幾種方法,及各自的優缺點 多執行緒實現方式implements runnable 或 extends thread 1 activity.runonuithread runnable 2 view.post runnable view.postdelay run...