1. 操作符與基本型別
賦值運算子的優先順序低於算數運算子。如:x*=3+2即x*=(3+2)
優先順序&&高於||, &高於^高於|
一元操作符的關聯是從右到左,「++」和「- -」都必須邦定乙個變數或者叫「左值」,如「x」。注意「-x」並不是左值。
例如:z+=-x++ + ++y,相當於:z+=-(x++)+(++y)
字元:』0』對應ascii的48,』a』對應的是65。
無論是無符號還是有符號的整數,-2這樣的都將被解釋為乙個由0和1構成的字串。對於無符號的負數變數,運算時將被解釋為乙個大的正整數。
賦值表示式的值是「=」右邊的值,型別是「=」左邊的型別。
7位數字是float浮點數的精度極限(intel8086和motorola68000平台)
資料型別不同的兩個數進行運算,結果將保持資料型別高的型別。
2.控制流與程式設計風格
continu語句將強行開始下一次迴圈
字元常數』\n』(其中「n」是三個八進位制數字)代表著乙個與八進位制數字n相對應的字元。比如說,「\101」對應的是001000001即65即在ascii對應』a』
所謂優良的程式設計風格,關鍵是讓你編寫出來的程式適合他人閱讀:
1). 把你的思路用一些簡明的語句表現出來
2). 為那些語句選擇一種適當的**結構
如果對某個函式的呼叫發生在對它做出宣告之前,c語言將假設該函式的返回型別是int
宣告為static的變數,在程式載入到記憶體時被初始化,在程式退出執行時終止
3.指標和陣列
「type *p」形式的定義向編譯器表明:當 *p出現在乙個表示式裡的時候,它將代表乙個type型別的值。p是乙個type型別的指標,這個指標的值是某個type型別元素的位址。type稱做指標p的基型別。「*」表示要取出p指向的那個位址的值!
對乙個指標變數使用遞增操作符,將使指標指向它基型別的下乙個元素。實際上是使該指標遞增sizeof(basetype)個位元組。
在c語言裡,x[i]被定義為「*(x+i)」,其中x是乙個位址。i是乙個整數遞增量。
關於多維陣列:
如,int a[3][3]=,,};
則a的型別是指向三元int陣列的指標,a的基型別是三元int陣列,而a+1將指向記憶體中的下乙個三元int陣列。a[0]的型別是指向int整數的指標,a[0]的基型別是int,而a[0]+1將指向記憶體中的下乙個int整數。這裡的a,a[0]求值為同乙個位址。事實上a+i與*(a+i)所表示的位址也是一樣的,都是第i行的位址(但意義不同)。
4.結構
//宣告結構,用oo的觀念來看,就是宣告了乙個輕量級的『類』!
struct s1,
,struct s1 *p =a;
則p->s表示指標p所指向的那個結構的s欄位所指向的字串。
a[--(p->s1p->i)].s 表示先對指標p所指向的那個結構的s1p欄位所指向的那個結構的i欄位進行遞減,再使用i欄位的值作為下標,去訪問陣列a的相應元素。
5.預處理
預處理的幾條原則:
1). 只要一條巨集定義語句裡面包含操作符,就應該用括號把它括起來
2). 巨集定義越緊湊越好;表示式比語句好;單語句比多語句好
3). 在巨集定義裡面要注意避免使用有***的c語言元素或者表示式
4). 一定要讓對巨集進行擴充套件得到的表示式,語句,塊都是完整的c語言元素
5). 巨集要盡量簡單,如果無法得到乙個簡單的巨集就應該把它定義為函式
C語言拾遺
main函式引數 c語言規定main函式引數只能有兩個,習慣上這兩個引數寫成argc和argv。c語言還規定argc必須是整形變數,argv必須是指向字串的指標陣列。因此,main函式的函式頭應該寫為 main argc,argv int argc char argv 或者 main int arg...
C語言拾遺
保證某些全域性變數的常量性 c c 中不能通過變數來定義陣列 const int row 10 const int col 10 c define row 10 define col 10orenum c style型別轉換 new type expression static cast expre...
C語言拾遺
1 標頭檔案裡不要放全域性變數,被多次包含時,生成.o檔案連線時會衝突 2 函式體裡變數宣告都要放到前面 3 編譯錯誤 error two or more data types in declaration specifiers 一般都是少了分號,檢查你的 4 引用庫函式時,有函式宣告,使用也沒錯,...