C語言學習總結

2021-06-28 11:59:18 字數 3844 閱讀 6907

看了李明杰老師的c

語言課程,感覺老師講得很細、很透。收穫了很多新的知識,對cc

語言課程的學習總結。

1. 執行c

語言程式的步驟

1> 編寫

.c原始檔

2> 編譯

.c原始檔為

.o目標檔案

3> 鏈結

.o目標檔案為可執行檔案

4> 執行可執行檔案

2. 常用格式符:

1> %d\%i

整數(int)

2> %f

小數(float

、double

)預設是

6位小數

3> %c

字元(char)

2. 變數作用範圍:從定義變數的那行**開始,一直到函式結束

3. **塊的作用:及時**不再使用的變數,可以提公升效能

5. scanf引數中用什麼分隔符,輸入的時候也要加上,如果

scanf

引數中以空格隔開,可以輸入可以以空格、

tab、回車作為分隔符

6. include 的作用:

拷貝檔案的所有內容到#include

所在的位置。自定義的檔案用

"",系統自帶的檔案用

<>

7. printf函式返回的字串常量的字元數,並不是字數

8. scanf函式返回成功接收得到的變數數

9. cc -o可更改可執行檔案的名字

1. 取餘運算:取餘結果的正負性只跟%

左邊的數值有關

2. a += 5 + 6 + 4; 運算順序為

a = a + (5 + 6 + 4);

3.「sizeof 

變數名」是正確的用法,「

sizeof 

型別名」是錯誤的用法

4. 常量不能進行++

運算1) if結構

if(條件1)

else if(條件2)

else

2) switch結構
switch (數值)

while (條件)

do  while(條件);

for (語句1; 條件; 語句2)

1. 乙個好習慣:在比較大小時,常量值放左邊,變數放右邊,防止出錯

2. 如果要在if

後面的語句中定義新的變數,必須用大括號

{}(不用括號的話變數的作用域不明確,編譯器會報錯)

3. 如果在case

中定義了新的變數,必須用大括號

{}包住

4. 如果需要用到死迴圈,最簡單的死迴圈是:while(1);

或者for(;;);

5. while和

do while

的區別:

while:如果一開始的條件不成立,永遠不會執行迴圈體

do while:不管一開始的條件是否成立,至少會執行一次迴圈體

6.如果要在迴圈體中定義新的變數,必須用大括號{}包住

格式:

返回值型別  函式名(形式引數列表)

1. 起乙個有意義的函式名

2. 如果沒有明確說明返回值型別,預設是返回int

型別,如果明確宣告了返回值型別,也可以不返回任何值

3. 函式不能重複定義,但是可以重複宣告

4. 如果有函式的宣告,沒有函式的定義

1> 編譯可以通過,因為編譯器只會檢測語法合不合理,並不會檢測函式有沒有定義

2> 鏈結報錯,因為鏈結的時候會檢測函式是否定義

5.迴圈的使用原則:一般優先使用for

迴圈然後再考慮

while

最後再考慮

do while

1.輸出格式

%d\%i  十進位制形式輸出整數

%c 輸出字元

%p 輸出位址

%f 輸出小數

%o 八進位制形式輸出整數

%x 十六進製制形式輸出整數

2.signed和

unsigned

的區別:

signed 最高位要當做符號位

unsigned 最高位不要當做符號位

3.異或的規律:

交換 9^5^6 == 9^6^5

任何數值跟

0進行異或,結果還是原來的數值,

9^0 == 9

a^b^a == a^a^b == 0^b == b

1、如果想再定義陣列的同時進行初始化,陣列元素個數必須是常量,或者不寫

2、只能在定義陣列的同時進行初始化

3、陣列作為函式引數,傳遞是整個陣列的位址,修改函式形引數組元素的值,會影響到外面的實參陣列

4、把字元陣列的陣列名傳入printf

,僅僅是個警告,可以列印出陣列裡的內容。

5、字串必須以』\0』(ascii

碼值為0

)結尾,

char name5 = ;

只能說是字元陣列(沒有以』\0』結尾)

6、strlen函式:計算的是

字元數,並不是字數。乙個漢字算作3

個字元計算的字元不包括\0

7、結構體所占用的儲存空間 必須是 最大成員位元組數的倍數

1. 忘記引入標頭檔案

2. 單引號和雙引號使用不當:單引號只能括住單位元組的字元,不能括住中文字元和字串

3. 空格問題

touch和

cc指令後面加入了空格,系統會當成兩個檔案使用,解決辦法:使用「

\ 」代替空格

在程式中不該敲空格的地方多敲了空格

4. 鏈結錯誤undefined symbols for architecture x86_64 「_main」,原因:沒有main函式

5. redefinition of 「函式名」,原因:函式同名

6. 標示符錯誤

合法識別符號

非法識別符號

注釋fromno12

from#12

識別符號中不能使用#符號

my_boolean

my-boolean

識別符號中不能使用「-」符號,應使用下劃線「_」代替

obj2

2ndobj

識別符號不能使用數字開頭

myint

int「int」是內建關鍵字

jack_rose

jack&rose

符號「&」不能出現在識別符號中

guig.u.i

識別符號內部需要出現「.」分隔符

7. 變數沒有初始化就使用,解決辦法:變數宣告以後就初始化

8. implicit conversion from ...to ...型別不匹配

9. 在case

後定義新變數,解決辦法:用大括號保住

10. while (...); 死迴圈

11. 在for

迴圈後寫分號,後面語句只執行一次

12. scanf直接傳入變數

1) 使用第三個變數

int temp = a;

a = b;

b = temp;

2) 利用兩個變數的差值

a = b - a;

b = b - a;

a = b + a;

3) 利用位運算

a = a ^ b;

b = a ^ b;

a = a ^ b;

C語言學習總結

1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...

C語言學習總結

無參巨集定義 即巨集名後不帶引數。其定義的一般形式為 define 識別符號 字串其中各個名稱的含義如下 1 其中的 表示這是一條預處理命令。凡是以 開頭的均為預處理命令。2 define 為巨集定義命令。3 識別符號 為所定義的巨集名。4 字串 可以是常數 表示式 格式串等。例如 define m...

C語言學習總結

while語句 當條件為真時,進行迴圈。for迴圈,第二個條件為真時,執行迴圈體 對於單鏈表應該設定的變數l的型別為結構指標型別,初始化時就是把l變成頭指標,並且還為其分配了記憶體空間 巨集定義 define long string it represent a long string that i...