看幾個(gè)C語(yǔ)言經(jīng)典筆試題。
有以下程序,如果 x 等于 254,則函數(shù)的返回值是多少?
int func(int x) { int countx = 0; while(x) { countx ++; x = x & (x - 1); } returncountx; }
看到這兩行代碼,應(yīng)該形成條件反射,看似復(fù)雜, 實(shí)則是在計(jì)算 x 的二進(jìn)制表示中 1 的個(gè)數(shù),254 的二進(jìn)制是這樣的,一共有 7 個(gè) 1
第二個(gè),經(jīng)典的 define 和 typedef 的區(qū)別。
define 屬于宏定義,預(yù)處理的時(shí)候替換,于是 a 和 b 變成了這樣,a 是指針,b 是整數(shù)。typedef 聲明的是一種類型,c 和 d 都屬于 int_ptr 類型,就是 int * 類型,兩個(gè)都屬于指針。
執(zhí)行下列語(yǔ)句后,變量 x 和 y 的值是多少?
y = 10; x = y++;
后置 ++ 的特點(diǎn),語(yǔ)句執(zhí)行完再賦值。x 還是 10,y 最后要加一,變成了11。
執(zhí)行以下代碼,程序的輸出是?
int main() { for(int i = 0; i < 3; i++) { switch(i) { case 0: printf("%d",i); ????????????case?2:???????????? ????????????????printf("%d",i);???????? ????????????default:???????????? ???????????? printf("%d",i);???????? ????????}???? ????}???? ????return?0; }
考察 switch 語(yǔ)句的基本語(yǔ)法,沒(méi)有 break,程序會(huì)一直向下執(zhí)行。i 等于 0,匹配到 case 0,輸出0,因?yàn)闆](méi)有 break,下面的兩個(gè) printf 都會(huì)被執(zhí)行,又輸出兩個(gè) 0。i 等于 1,沒(méi)有匹配,
執(zhí)行最后的 default ,輸出一個(gè) 1。i 等于 2,匹配到 case 2,輸出 2, 同樣因?yàn)闆](méi)有 break,下面的 printf 也會(huì)輸出 2。
執(zhí)行以下代碼,在32位系統(tǒng)中,程序的輸出是?
void Func(char str_arg[2]) { int m = sizeof(str_arg); int n = strlen(str_arg); printf("%d ", m); printf("%d ",n); } intmain(void) { charstr[]="Hello"; Func(str); }
考察 strlen 和 sizeof 的用法。雖然形參看起來(lái)是個(gè)數(shù)組,但是對(duì)于編譯器來(lái)說(shuō),一旦它作為參數(shù),就是當(dāng)作指針來(lái)處理。sizeof的結(jié)果是4,strlen 的結(jié)果是 5。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136824 -
程序
+關(guān)注
關(guān)注
117文章
3787瀏覽量
81043 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68612
原文標(biāo)題:五個(gè)C語(yǔ)言筆試題,看看能做對(duì)幾個(gè)?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論