C語言知識點總結

2021-06-10 01:25:16 字數 2768 閱讀 1035

有段事件沒有寫c程式了,有些地方有些生疏了。這兩天事情比較少,準備再系統的看一邊c的基礎知識。這裡再總結一下平時沒太注意的知識要點。1、c語言的語句塊在c語言中,任何允許出現語句的地方既可以是由;號結尾的一條語句,也可以是由{}括起來的若干條語句或宣告組成的語句塊(statement block),語句塊和上一章介紹的函式體的語法相同。注意語句塊的}後面不需要加;號。如果}後面加了;號,則這個;號本身又是一條新的語句了,在c語言中乙個單獨的;號表示一條空語句(null statement)。

6

int main(

void)7

;//這裡相當於兩個空語句了

1011

int i=0;

1217

printf

("i=%d\n"

, i)

;//can't access j here

22return0;

23}

2、取模運算%

c99規定,如果ab是整型,b不等於0,則表示式(a/b)*b+a%b的值總是等於a。結合整數除法運算要truncate toward zero,可以得到乙個結論:%運算子的結果總是與被除數同號(想一想為什麼)。其它程式語言對取模運算的規定各不相同,也有規定結果和除數同號的,也有不做明確規定的。

寫乙個函式,引數是整型變數x,功能是列印x的個位和十位:

25

void quwei(

int x)

26

3、float和double型別

7

int main()8

問題發現:當x定義為double型別時,上面程式錯誤,x讀取的值有誤。但是編譯時需要加上-wall選項才能發現原來是型別不匹配。

如何讀取double型別變數?

4、結構體的初始化

5

int main()6

;1314double x =

2.0;

15//初始化複數

16struct temp z1 =

; z1.img=3.0

17struct temp z2 =

; z2.img=0.0

18struct temp z3 =

; z3.img=0.0

1920

return0;

21}

注意:z1必須是區域性變數才能用另乙個變數x的值來初始化它的成員,如果是全域性變數就只能用常量表示式來初始化。這也是c99的新特性,c89只允許在{}中使用常量表示式來初始化,無論是初始化全域性變數還是區域性變數。

{}這種語法不能用於結構體的賦值,例如這樣是錯誤的:

20

struct temp z1;

21 z1 =

;

以前我們初始化基本型別的變數所使用的initializer都是表示式,表示式當然也可以用來賦值,但現在這種由{}括起來的initializer並不是表示式,所以不能用來賦值。

有些時候結構體或陣列中只有某乙個或某幾個成員需要初始化,其它成員都用0初始化即可,用designated initializer語法可以針對每個成員做初始化(memberwise initialization),很方便。designated initializer是c99引入的新特性,用於初始化稀疏(sparse)結構體和稀疏陣列很方便。例如:

struct temp z1 =

;

結構體變數之間使用賦值運算子是允許的,用乙個結構體變數初始化另乙個結構體變數也是允許的,例如:

struct complex_struct z1 =

;struct complex_struct z2 = z1; z1 = z2;

同樣地,z2必須是區域性變數才能用變數z1的值來初始化。既然結構體變數之間可以相互賦值和初始化,也就可以當作函式的引數和返回值來傳遞。

struct temp add_complex(

struct temp z1,

struct temp z2)

由.運算子組成的表示式能不能做左值取決於.運算子左邊的表示式能不能做左值。在上面的例子中,z是乙個變數,可以做左值,因此表示式z.x也可以做左值,但表示式add_complex(z, z).x只能做右值而不能做左值,因為表示式add_complex(z, z)不能做左值。

5、列舉

4

int main()5

;7int red =1;

8printf

("%d\t%d\n"

,red, yellow);9

10return0;

11}

結構體的成員名和變數名不在同一命名空間中,但列舉的成員名卻和變數名在同一命名空間中,所以會出現命名衝突。以上**是不合法的:

本文參考《linux c程式設計 一站式學習》

C語言知識點總結

以下內容為本人對c語言中經常忘記但是又重要的知識點的總結。i,i 在使用i之前,先使i的值加 減 1 i i 在使用i之後,使i的值加 減 1 continue 結束本次迴圈語句 break 中止執行switch或迴圈語句 if語句常用的三種形式 while迴圈,for迴圈,do while迴圈都可...

C語言知識點小總結

定義和宣告的最大區別在於 定義建立了變數 物件 並為這個物件分配了記憶體。宣告 只是告訴編譯器這個變數名被提前預定了 register要求編譯器盡可能的將變數放在cpu內部暫存器中,而不會是通過記憶體定址訪問以提高效率。break可以跳出所有迴圈 do while while for 迴圈語句的主要...

C語言return知識點總結

return break和continue 這三個關鍵字有乙個共同點,那就是讀能讓後面的語句不執行,不同的地方就是挑的距離不一樣。return很強大,如果乙個函式中有程式設計客棧乙個return,並且執行了,那麼這個函式就完了。return 表示從被調函式返回到主調函式繼續執行,返回時可附帶乙個返回...