天天看點

20140428 宏定義 單連結清單翻轉 野指針1、宏定義swap,加括号有什麼意義2、單連結清單插入、删除、反轉操作3、free,野指針 4、void *指針的作用

#define swap(x,y) x = (x)+(y);y=(x)-(y);x=(x)-(y) 加括号是為了處理表達式參數(即宏的參數可能是個算法表達式)時不出錯,因為宏替換就是文本替換,是以如果有以下情況: #define com(a,b) (a)*(b) 那麼com(6+5,3),它會換成這樣: (6+5)*(3) 但是如是去掉了定義中括号,即寫成這樣: #define com(a,b) a*b 那麼com(6+5,3),它就會換成這樣:6+5*3 這樣顯然就和宏的意圖不符合了。

1、free隻是釋放了malloc所申請的記憶體,并不改變指針的值;

2、由于指針所指向的記憶體已經被釋放,是以其它代碼有機會改寫其中的内容,相當于該指針從此指向了自己無法控制的地方,也稱為野指針;

3、為了避免失誤,最好在free之後,将指針指向null。