牛客網錯題集(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
for迴圈後,得到9136
2.
**可以通過編譯嗎?如果不能應該如何修改?
templateclass foo
};
templateclass fooderived:public foo
;
int main()
答案:
編譯錯誤,可以在fooderived類中新增乙個建構函式解決問題。
解析:
當基類建構函式需要外部傳遞引數才能進行初始化時,派生類必須顯式定義建構函式,為基類傳遞引數;基類如果不需要傳遞或者可以不傳遞引數,派生類可以不用顯式定義建構函式。
3.
下面是一段c程式:
void foo(int b[3])
void main()
,,};
foo(a);
printf(「%d」,a[2][1]);
}
這段程式的輸出是()
答案:9
解析:陣列傳遞了首位址,b[0][0]指向陣列a[0][0],但是執行++b後,b[0][0]指向a[1][0],因此b[1][1]就是a[2][1],b[1][1]=9即a[2][1]=9。
4.
turbo c環境下,下面程式執行的結果是()
int main()
;
int *p, **k;
p = a;
k = &p;
printf("%d", *(p++));
printf("%d", **k);
return 0;
}
答案:12
解析:程式首先定義了乙個一維陣列a,賦其初值,並定義乙個同型別的指標變數p和乙個指向指標的指標變數k,然後讓指標變數p指向陣列的首位址,接著將指標變數p的位址值賦給指向指標的指標變數k。在第一條輸出語句中,首先我們需要弄清楚*(p++)的作用,它是先呼叫指標變數p的值,然後使其自加,輸出效果等價於*p,因此,最後輸出的結果是陣列中的第乙個元素。在第二條輸出語句中,我們需要弄明白**k的作用,指向指標的指標變數類似於指標變數,如果用**k表示乙個數值,可以確定這條輸出語句的輸出結果是乙個數值,而非位址,從表示式k=&p可以看出,k的值是指標變數p的位址值,p的值改變後,k能實時得到改變,那麼在第一條輸出語句對p的改變,在第二條輸出語句中得到了體現。因此,**k輸出的是陣列中的第二個元素.
牛客網 錯題整理(4)
錯題集 1.沒用引數的兩個函式是不能過載的.說法是否正確?答案 錯誤 解析 const 可以構成過載 2.math.round 11.5 等於 答案 12 解析 首先要注意的是它的返回值型別是long,如果 math.round 11.5f 那它的返回值型別就是int,這一點可以參考api 其次它返...
牛客網 錯題整理 6
錯題集 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 解析 指標自增 自減每次移動的偏移量是指標所指向物件的...
牛客C 錯題筆記整理
動態繫結是物件導向程式設計語言中的一種機制。這種機制實現了方法的定義與具體的物件無關,而對方法的呼叫則可以關聯於具體的物件。物件導向有三種特性 封裝 繼承 多型。其中多型性有兩種,一種是依靠函式過載實現的靜態繫結,一種是依靠虛函式實現的動態繫結。c 中的純虛函式,下面說法均正確 子類中必須覆蓋基類的...