本文主要記錄《c陷阱與缺陷》第三章中的一些知識。
一、指針與數組:
c語言數組特點:
(1)c語言中隻有一維數組,而且數組的大小必須在編譯期就作為一個常數确定下來。由于數組的元素可以是任何類型的對象,當然也可是另外一個數組。這樣,要“仿真”出一個多元數組就不是一件難事。
(2)對于一個數組,我們隻能夠做兩件事:确定該數組的大小,以及獲得指向改數組下标為0的元素的指針。其他有關數組的操作,哪怕他們乍看上去是以數組下标進行運算的,實際上都是通過指針進行的。換句話說,任何一個數組下标運算都等同于一個對應的指針運算。
二、數組溢出:
數組中實際不存在“溢界”元素的位址位于數組所占記憶體之後,這個位址可以用于進行指派和比較;即:對于數組結尾之後的下一個元素,取它的位址是合法的。
三、一些運算符性質:
運算符&&和運算符||首先對左側操作數求值,隻在需要時才對右側操作數求值;
運算符 ?: 有三個操作數,在a?b:c中,操作數a首先被求值,根據a的值再求操作數b或c的值;
逗号運算符 , 首先對左側操作數求值,然後該值被“丢棄”,再對右側操作數求值;
指派運算符 = 并不保證任何求值順序。
四、判斷整數相加溢出
在無符号算術運算中,沒有所謂“溢出”一說。如果算術運算符的一個操作數是有符号整數,“溢出”也不可能發生。
檢查a+b是否溢出:
int_max是一個已定義的常量,代表可能的最大正整數值,ansi c标準在<limits.h> 中定義了 int_max