錯題整理(1)

2021-08-21 16:42:48 字數 2669 閱讀 5018

1.  charc = '\72'; 中的\72代表乙個字元,72是八進位制數,代表ascii碼字元「:」。

2.  10*a++ 中a先進行乘法運算再自增(筆試中經常喜歡出這類運算子優先順序容易混淆的輸出問題)。

static關鍵字:

1)函式體內static變數的作用範圍為函式體。不同於auto變數。該變數的記憶體只被分配一次。因此其值在下次呼叫時仍維持上次的值。

2)在模組內的static全域性變數可以被模組內的所有函式訪問。但不能被模組外的其他函式訪問。

3)在模組內的static函式只可被這一模組內的其它函式呼叫。這個函式的使用範圍被限制在宣告它的模組內。

4)在類中的static成員變數屬於整個類所有,對類的所有物件只有乙份複製。

5)在類中的static成員函式屬於整個類所有,這個函式不接受this指標,因而只能訪問類的static成員變數。

const關鍵字:

1)欲阻止乙個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化。因為以後就沒有機會再改變它了。

2)對指標來說,可以指定指標的本身為const,也可以指定指標所指向的數為const。或二者同時為const。

3)在乙個函式的宣告中,const可以修飾形參,表明它是乙個輸入引數。在函式內不能改變其值。

4)對於類的成員函式,若指定其為const型別。則表明其是乙個常量函式。不能修改類的成員變數。

5)對於類的成員函式,有時候必須指定其返回值為const型別。以使得其返回值不為「左值」。

4.  易誤解:如果inta[5], 那麼a與&a是等價的,因為兩者位址相同。 

解答:一定要注意a與&a是不一樣的,雖然兩者位址相同,但意義不一樣,&a是整個陣列物件的首位址,而a是陣列首位址,也就是a[0]的位址,a的型別是int[5],a[0]的型別是int,因此&a+1相當於a的位址值加上sizeof(int) * 5,也就是a[5],下乙個物件的位址,已經越界了,而a+1相當於a的位址加上sizeof(int),即a[1]的位址。

5.程式輸出題:

charstr1 = "abc";

charstr2 = "abc";

constcharstr3 = "abc";

constcharstr4 = "abc";

constchar*str5 = "abc";

constchar*str6 = "abc";

char*str7 = "abc";

char*str8 = "abc";

cout<< (str1 == str2) << endl;

cout<< (str3 == str4) << endl;

cout<< (str5 == str6) << endl;

cout<< (str7 == str8) << endl;

0x23aa80 

0x23aa70 

0x23aa60 

0x23aa50 

0x23aa48 

0x23aa40 

0x23aa38 

0x23aa30

0x23aa80 

0x23aa70 

0x23aa60 

0x23aa50 

0x100403030 

0x100403030 

0x100403030 

0x100403030

可以發現str1~str4中的內容是存在棧上,位址各不相同,而str5~str8的內容都是儲存在常量區,所以位址都相同。

注意:char*str ="abc";

printf("%p\n",str1); 

cout<< &str1 << endl;

上面列印的是字串 「abc」的位址,下面列印的是 str1 變數的位址。

6.在c++中引數傳遞只有值傳遞和引用傳遞,位址傳遞指的是指標傳遞,而指標傳遞本質上也是值傳遞(指標值)

7.假設x=9981,下面函式的返回值是?

int func(x)

int countx=0;

while(x)

countx++;

x=x&(x-1);

return countx;

先轉2進製為10011011111101,每次x&(x-1)會讓原來的1(從低位到高位依次)變為0。一共10個1,10次迴圈之後x為0,退出迴圈。

8.   32位系統    64位系統  (單位bytes)  

char         1       1

short          2        2

int         4        4 

指標             4           8

long           4        8

float        4         4

double             8       8

牛客網 錯題整理(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...

8 28 2019CSP S1錯題整理

第 20 題 4 分 include using namespace std int n int a 100 int main return0 若輸入的 aa 陣列是乙個嚴格單調遞增的數列,此程式的時間複雜度是 解析 當a 陣列是乙個嚴格單調遞增的數列時,while 迴圈一次都不執行,所以程式的時間...

錯題整理(2)

1.在c 中,如果確定了某乙個建構函式的建立過程,在該建構函式中如果呼叫了其它過載的建構函式,它將不會執行其它建構函式的初始化列表部分 而是執行函式體 此時已經退化成普通函式了。例子說明如下 classcbook intmain cbook c cout c.m price endl 此時並不會輸出...