錯題集
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 下...