1. 程式人生 > >C語言單元小結(2)

C語言單元小結(2)

巨集

知識點
功能:巨集可在預編譯時將程式中某些內容直接替換,沒有優先順序
帶參巨集:
帶參巨集與普通函式的比較:
1.帶參巨集不必指定引數型別,而函式只能傳遞某個型別的引數。
2.帶參巨集在預編譯時直接替換,比函式呼叫更有效率,開銷更小。
3.帶參巨集只適用於較小篇幅的函式,否則會大幅增加程式的長度,使得效率反而降低。

帶參巨集與行內函數的區別:
巨集在預編譯時替換,而行內函數在編譯時替換,兩者都可用於簡短的功能函式。

由於巨集只替換沒有優先順序的性質,在使用巨集時注意括號的新增

實現
1.巨集的直接替換
這裡寫圖片描述

2.利用帶參巨集實現三目運算
這裡寫圖片描述

行緩衝

輸出行緩衝:


以\n為輸出結束識別符號,若沒有該換行符,則將一直運算至緩衝區填滿後或運算結束後一起輸出。
輸入行緩衝:
以\n為輸入結束識別符號,若不鍵入換行符,則一直等待輸入。

隱式轉換

知識點
1.低精度向高精度轉換安全:float->double
高精度直接截斷
2.小範圍轉換至大範圍:->unsigned,char->int
3.輸出時也會進行型別轉換,若int型別用%u輸出,則將轉換為unsigned型別後輸出。

實現
1.int型別的a轉化為float型別,與b相加後截斷為int型別賦值給c
這裡寫圖片描述

2.將int型別轉換為unsigned int型別
這裡寫圖片描述


也可以寫為
這裡寫圖片描述

0,’0’,’\0’的區別

0是數字零
‘\0’是一個char字元,功能是標誌一個字串的結束,對應的數值是0
‘0’是一個char字元,對應的數值是48

函式

知識點

返回型別 函式名(引數)

main函式

知識點
int main (int argc,char *argv[])
int表示返回值為int型別,作為程式的入口,返回值給父程序
argc表示引數個數
argv[]表示引數列表

shell是父程序,傳引數給main的argv
實現
功能:argc為傳入引數的個數,該程式可以依次打印出argv[]中的引數
這裡寫圖片描述

這裡寫圖片描述

遞迴函式

知識點


利用棧的構建特性實現層層呼叫
實現
輸出fibo數列的指定位
這裡寫圖片描述

迭代函式

實現
這裡寫圖片描述

其他函式

例項

1.strcmp函式
功能:可以man3看到strcmp函式的返回值,字串a小於b則返回為負數,等於則返回零,大於則返回正數。由此可見函式返回值的定義、傳遞和表達。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

2.printf函式
功能:檢視printf函式的引數傳遞,可以發現,printf函式引數由右向左傳遞
這裡寫圖片描述

實踐

1.利用函式呼叫實現加減乘除

知識點
標準格式要求:函式的宣告在main之前,末尾需要加分號,定義在函式之後

實現
標頭檔案呼叫與函式宣告
這裡寫圖片描述

main函式
這裡寫圖片描述
這裡寫圖片描述

函式定義
這裡寫圖片描述

2.編寫函式,計算數字二進位制形式中1的個數

知識點
計算機使用補碼儲存,本題即為計算補碼中1的個數
正數的補碼是原碼本身,負數的補碼是反碼加一
正數位移後補零,負數位移後補一
思路
按位將數字與1相與,若結果不為0則該位為1。考慮到負數位移補1陷入死迴圈的情況,選擇位移相與的1,則該1位移後不為1,而是對應位為1。
實現
功能函式
這裡寫圖片描述

主函式
這裡寫圖片描述

3.編寫函式,實現strcmp函式功能

功能函式
這裡寫圖片描述

主函式
這裡寫圖片描述

3.編寫函式,實現memset函式功能

這裡寫圖片描述

4.編寫函式,實現strcpy函式功能

這裡寫圖片描述

5.編輯函式,輸入命令顯示是否合法

這裡寫圖片描述

這裡寫圖片描述