牛客網 錯題整理 6

2021-08-04 06:59:08 字數 3289 閱讀 2960

錯題集

1.以下程式段執行後結果是()

#include

void main()

;

p=q=arr;

p++;

printf("%d,",p-q);

printf("%d,",(char*)p-(char*)q);

printf("%d",sizeof(arr)/sizeof(*arr));

}

答案:1,2 15

解析:指標自增、自減每次移動的偏移量是指標所指向物件的位元組大小,所以p++與q的偏移量是2個位元組。

指標相減的值是指標位址的偏移除以指標每次移位的大小;

1)p-q=1;偏移量為2個位元組,每次移動2個位元組,所以為1

2)(char *)p-(char *)q,指標的偏移沒變,但是每次指標移位是按照(char*)型別移動,即每次移動1個位元組,所以是2

3)數字每次元素2個位元組,所以sizeof(arr)為30,sizeof(*arr)為2

2.下面程式輸出是什麼

int main()

else

}

}

return 0;

}

答案:65536,65535

解析:

true只經歷一次, i=65535,sum=1,value=65536,

false第一次迴圈,i=65535-1,sum=1+0 =1,value=65535,

false第二次迴圈,i=65535-2,sum=1+2=3,value=65534,

false第三次迴圈,i=65535-3,sum=3+1=4,value=65533,

false第四次迴圈,i=65535-4,sum=4+0=4,value=65532,

false第五次迴圈,i=65535-5,sum=4+2=6,value=65531, ………

補充一點:for(;i>=0;--i)由於是unsigned無符號,所以並不是i<0退出迴圈,是當i=0後下乙個i的值從最初的0xffff從頭再開始(無法表示-1),也就是說如果for迴圈裡沒有break即死迴圈。-1 = 1000 0000 0000 0001b = 補碼:1111 1111 1111 1111 = 無符號則為0xffff,儲存方式為補碼形式

【i】value:65535~0,而i: 65534~0,(還差一次循壞),所以當value=0時i=初值0xffff=65535;

【sum】的規律:從false第二次開始看(迴圈65534~0共65535次),(組1)3,4,4, (組2)6,9,9, (組3)7,10,10…三個為一組,所以65535/3=21845…0,表示21845組第二個數值,sum=21845*3+1=65536

3.有定義如下:

static char x[ ]= "abcde";

static char y[ ]=;

則正確的說法是?

答案:x陣列的長度大於y陣列的長度

解析:對於 static char x [ ]= "abcde" ;而言,長度為6,因為 "abcde" 是字串,末尾預設有'\0'結束符,長度為6。

對於 static char y [ ]=;而言,是將每個字元逐一賦值到y中,所以長度為5。

4.下面一段程式的輸出結果是?

#define product(x) ((x)*(x))

int main()

答案:12 42

解析:這題在不同的編譯器會有不同的結果:

第一種情況:

j = (i++*i++);=>3*4  第一次i++返回3 第二次i++返回4 最後i的值為5

k = (++i*++i);=>6*7  第三次++i返回6  第四次++i 返回7 最後i的值為7

但是還有一種編譯器的分析情況是這樣

j=(i++*i++)=>3*3 也就是說執行時直接使用的i的值3 但是i最終在記憶體的值還為5

畢竟加了2次

k = (++i*++i);=>7*7  執行時先計算的++i,然後取出i的最終值7 在計算乘法。

還有一種情況為:

j=(i++*i++)=>3*3 也就是說執行時直接使用的i的值3 但是i最終在記憶體的值還為5

畢竟加了2次

k = (++i*++i);=>5*5  執行時先取出i的值計算乘法,然後i的的值自增2次

終值7

牛客網 錯題整理(4)

錯題集 1.沒用引數的兩個函式是不能過載的.說法是否正確?答案 錯誤 解析 const 可以構成過載 2.math.round 11.5 等於 答案 12 解析 首先要注意的是它的返回值型別是long,如果 math.round 11.5f 那它的返回值型別就是int,這一點可以參考api 其次它返...

牛客網 錯題整理(1)

牛客網錯題集 1 1.int main int argc char ar 經編譯連線生成的可執行檔案 tt.exe 若執行輸入以下命令列 tt 12 345 678 則程式執行的輸出結果是 答案 9136 解析 輸入tt 12 345 678時,argc 4 ar ar i 分別取了 1,3,6 f...

牛客網錯題集錦6

1 在rhel5系統中使用vi編輯檔案時,使用 末行命令可以像下圖一樣顯示出每一行的行號。答案 set nu 2 一台主機要實現通過區域網與另乙個區域網通訊,需要做的工作是?答案 定義一條本機指向所在網路閘道器的路由 答案 本機只需設定本地網路預設閘道器,至於到目的網路,是閘道器路由器的工作。3 下...