C 易錯點總結

2021-06-29 04:47:09 字數 2105 閱讀 5574

1.下面這段**考察變數的作用域問題。

[cpp]view plain

copy

#include

using

namespace

std;  

void

other()  

intmain()    

答案如下:

----main-----

0 -10 0

----other-----

4 0 15

----main-----

0 -10 8

----other-----

6 4 15

考察點:

區域性作用域中靜態變數的特點是,它並不會隨著每次函式呼叫而產生乙個副本,也不會隨著函式返回而失效。也就是說,當乙個函式返回後,下一次再呼叫時,該變數還會保持上一回的值,即使發生了遞迴呼叫,也不會為該變數建立新的副本,該變數會在每次呼叫見共享。

解析:第一次a=0,b=-10,c=0,之後呼叫other函式,因為a和b為靜態區域性變數,所以在other函式就有保持值的特點,這時,根據就近原則,a=4,b=0,c=15.

然後繼續執行,發現a,b的改變都是在other中,而對main中的a,b沒有影響,所以a,b值不變,c由於自加8,所以c=8.然後又進入other,因為a,b為區域性靜態變數,不會再每次進入相同函式時產生副本,所以進入時a=4,自加2,等於6,上次函式結束時b=a,所以b=4,這次再進入時b還是保持4不變,而c是動態區域性變數,每次進入函式都要重新初始化,所以c=10,自加5等於15.所以a=6,b=4,c=15.

2.說明arr類中,element元素返回乙個引用物件的原因。

[cpp]view plain

copy

#include

#include

#include

using

namespace

std;  

class

point  

point(int

x, int

y):x(x), y(y)  

~point()  

intgety()

const

void

move(

intnewx, 

intnewy)  

};  

class

arr  

~arr()  

point &element(int

index)  

};  

intmain()    

答案:因為我們建立的points物件是乙個在類內部由動態陣列實現的物件,而我們對陣列的操作無非就是取元素,改變元素,如果element不返回乙個引用時,那麼我們可以認為這個元素是唯讀的,我們無法通過賦值等途徑改變這個元素(其實是乙個物件)的值,而我們返回乙個引用的話,就相當於取出元素本身,就可以對它進行正常的讀寫操作。這樣才符合陣列的性質。

3.淺複製和深複製

[cpp]view plain

copy

#include

using

namespace

std;  

class

a    

a(const

a &p) 

//淺複製就是注釋掉自定義複製拷貝函式(試試看?)

~a()  

void

show()  

};  

intmain()    

4.看看下面這個**怎麼錯了?

[cpp]view plain

copy

#include

using

namespace

std;  

#define max 255

intmain()  

p[255]='\0'

;  cout<}  

錯誤在於ch<=255,這個條件。因為ch是unsigned char型別的,佔據乙個位元組,所以最大值為255.當ch迴圈到255時候+1之後溢位,就變成0了。這樣,就陷入了死迴圈。正確該法是ch<255.

總結 易錯點

題目要求是 結尾,我使用了str 1 str 2 single line containing only marks the end of a test case.題目給的是 f1 1 f2 2 fn fn 1 fn 2 n 3 我卻從f0開始推,並且迴圈跟著從0開始了 題目可能會出現一道腦筋急轉彎...

C語言易錯點總結

一下分為幾個部分分別加以說明。一 關鍵字 1.什麼是定義?什麼是宣告?兩者有何區別?答 定義是建立乙個物件,並未該物件分配一塊記憶體和取乙個名字,這個名字就是變數名或者物件名 宣告是告訴編譯器這個變數或者物件的記憶體已經存在,這裡只是引用。兩者最重要的區別在於,定義建立了物件並為物件分配了記憶體,而...

pandas易錯點總結

1.按照多個條件篩選時,應當使用 而不是and,如 lc.loc lc grade b lc loan amnt 5000 2.單一series賦值給series之前需要轉換資料格式,如int,float,datetime 3.loc,iloc,ix區別 loc按索引名稱取值,如 import pa...