看了李明杰老師的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結構
2) switch結構if(條件1)
else if(條件2)
else
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...