C語言拾遺

2021-09-07 21:03:17 字數 1789 閱讀 3302

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 引用庫函式時,有函式宣告,使用也沒錯,...