1. 函數是什么?
維基百科中對函數的定義: 子程序
在計算機科學中,子程序(英語:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一個大型程序中的某部分代碼, 由一個或多個語句塊組成。它負責完成某項特定任務,而且相較于其他代 碼,具備相對的獨立性。
一般會有輸入參數并有返回值,提供對過程的封裝和細節的隱藏。這些代碼通常被集成為軟件庫。
2. C語言中函數
? ?1.庫函數
? ?2.自定義函數
?2.1 庫函數:
像上面我們描述的基礎功能,它們不是業務性的代碼。我們在開發的過程中每個程序員都可能用的到, 為了支持可移植性和提高程序的效率,所以C語言的基礎庫中提供了一系列類似的庫函數,方便程序員 進行軟件開發。
說白了就是開發c語言的人幫你設定好的函數,你直接拿去用就可以了
這是c++的庫函數網站: www.cplusplus.com
簡單的總結,C語言常用的庫函數都有:
---IO函數
---字符串操作函數
---字符操作函數
---內存操作函數
---時間/日期函數
---數學函數
---其他庫函數?
?需要全部記住嗎?
Nonono! 只需要學會查詢工具的使用:
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com(英文版)
http://zh.cppreference.com(中文版)
2.2 自定義函?
相比于庫函數更加重要的是自定義函數。
自定義函數和庫函數一樣,有函數名,返回值類型和函數參數。 但是不一樣的是這些都是我們自己來設計。這給程序員一個很大的發揮空間。
ret_type fun_name(para1, * ){statement;//語句項
}ret_type 返回類型
fun_name 函數名
para1 函數參數
舉一個很經典的例子
寫一個函數可以交換兩個整形變量的內容。
首先說明一下,函數中如果不需要返回值,則使用void關鍵字?
#include <stdio.h>
void Swap1(int x, int y){int tmp = 0;tmp = x;x = y;y = tmp;}int main(){int num1 = 1;int num2 = 2;Swap1(num1, num2);printf("Swap1::num1 = %d num2 = %d\n", num1, num2);return 0;
}
看上去實現了其實并沒有,因為函數中x,y與我們輸入的a,b所代表的內存都不一樣,這里只是將a與b的值賦給x,y進行計算,最終與a和b無關。
正確的寫法應該是用int*調用其內存,使我們的a,b與x,y是相同的(所代表的內存相同)
//正確的版本
void Swap2(int *px, int *py){int tmp = 0;tmp = *px;*px = *py;*py = tmp;}int main(){int num1 = 1;int num2 = 2;printf("Swap2::num1 = %d num2 = %d\n", num1, num2);return 0;}
?3. 函數的參數
3.1 實際參數(實參):
---真實傳給函數的參數,叫實參。
---實參可以是:常量、變量、表達式、函數等。
---無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參
3.2 形式參數(形參):?
---形式參數是指函數名后括號中的變量,因為形式參數只有在函數被調用的過程中才實例化(分配內 存單元),所以叫形式參數。
---形式參數當函數調用完成之后就自動銷毀了。因此形式參數只在函數中有效。
>???上述例子中?Swap1 和 num2 和傳 給Swap2函數的 Swap2 函數中的參數 &num1 , x,y,px,py都是形式參數。
>? ?在main函數中傳給 Swap1 的 &num1 ,&num2 是實際參數。?
可以看到 Swap1 函數在調用的時候,x,y擁有自己的空間,同時擁有了和實參一模一樣的內容。 所以我們可以簡單的認為:形參實例化之后其實相當于實參的一份臨時拷貝。?
也就是說形式參數在使用時是根據輸入參數多少重新分配相應的內存,再進行計算,與輸入參數沒有本質聯系