牛客網 錯題整理(1)

2021-09-30 14:25:35 字數 2226 閱讀 4625

牛客網錯題集(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 中的純虛函式,下面說法均正確 子類中必須覆蓋基類的...