C陷阱與缺陷第三章 語義「陷阱」

2021-08-04 02:43:32 字數 1125 閱讀 7719

1.指標陣列

①注意:①c語言中只有一維陣列,而且陣列的大小必須在編譯期就作為乙個常數確定下來。c語言中陣列的元素可以是任何型別的物件,也可以是另外乙個陣列,這樣,就可以**出乙個多維陣列。

②對於乙個陣列,只能夠做兩件事:確定陣列的大小,以及獲得指向該陣列下標為0的元素的指標。 有關對陣列的操作,實際上都是通過指標進行的。換句話說,陣列下標運算都等同於乙個對應的指標運算。

②宣告乙個陣列:*、 int a[3]; //a是乙個擁有3個整型元素的陣列;

*、 structb[17]; //b是乙個擁有17個元素的陣列,其中的每個元素都是乙個結構體;

*、 int calendar[12][31]; //calendar是乙個陣列,該陣列擁有12個元素,每個元素又擁有31個整型元素的陣列;

*、 p是乙個指標,也可以這樣寫: p = a; //指標p指向的是陣列a[0],p+1指向陣列a[1];

* 、int (*ap)[31];//ap是指向有31個元素的陣列的指標,相當於乙個二維陣列

int (*monthp)[31];

for(monthp = calendar; monthp < &calendar[12]; monthp++)//處理每個月份的情況

2.作為函式的陣列宣告

如果使用陣列名作為引數,那麼陣列名會立刻被轉化為指向該陣列第乙個元素的指標。

3.邊界計算與不對稱邊界

c語言中,乙個擁有n個元素的陣列,a[n],元素的下標範圍是從0到n-1;

乙個陣列的下界為m,上界為n,則陣列有n-m+1個元素;

4.求值順序

運算子&&、||和!對運算元的處理方式是將其視作要麼是「真」,要麼是「假」;

運算子&&和運算子||首先對左側運算元求值,只有左側結果正確時才對右側運算元求;

運算子&、|和~對運算元的處理方式是將其視作乙個二進位制的位序列,分別對其每個位進行操作。例如, 10(1010)&12(1100)的結果是8(二進位制表示為1000)。

為函式main提供返回值

c語言中,通過main函式的返回值來告知作業系統該函式的執行是成功還是失敗。返回值為0代表程式執行成功,返回值非0則表示程式執行失敗。如果不返回任何值,那麼有可能看上去執行失敗。

第三章 語義陷阱

3.1指標和陣列 1 c語言中只有一維陣列,且陣列大小必須在編譯期確定 2 對於陣列,我們只能確定該陣列的大小,以及獲得指向該陣列下標為0的元素的指標 3 陣列名a除了作為運算子sizeof的引數這一情形外,在其他情況下都是陣列a中下標為0的元素的指標。sizeof a 為整個陣列a的大小 3.5空...

C陷阱與缺陷讀書筆記(第3章)語義「陷阱」

1.c語言只有一維陣列,而且陣列的大小必須在編譯器就作為乙個常數確定下來。2.任何乙個陣列下標進行運算的,實際上都是通過指標進行。3.int calendar 12 31 calendar是乙個陣列,該陣列包含12個陣列型別的元素,其中每個元素都是乙個擁有31個整型元素的陣列。4.除了陣列名a 被用...

c陷阱與缺陷 陷阱

例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...