C语言函数的概念
函數的使用
函數在使用時必須帶上括號,有必要的話還要傳遞參數,函數的執行結果也可以賦值給其它變量。例如,strcmp() 是一個用來比較字符串大小的函數。
示例
#include <stdio.h> #include <string.h> int main(){char str1[] = "http://www.sougou.com";char str2[] = "http://www.baidu.com";//比較兩個字符串大小int result = strcmp(str1, str2);printf("str1 - str2 = %d\n", result);return 0; }str1 和 str2 是傳遞給 strcmp() 的參數,strcmp() 的處理結果賦值給了變量 result。
我們不妨設想一下,如果沒有 strcmp() 函數,要想比較兩個字符串的大小該怎么寫呢?請看下面的代碼:
#include <stdio.h> #include <string.h> int main(){char str1[] = "http://www.sougou.com";char str2[] = "http://www.baidu.com";int result, i;//比較兩個字符串大小for(i=0; (result = str1[i] - str2[i]) == 0; i++){if(str1[i] == '\0' || str2[i] == '\0'){break;}}printf("str1 - str2 = %d\n", result);return 0; }比較字符串大小是常用的功能,一個程序可能會用到很多次,如果每次都寫這樣一段重復的代碼,不但費時費力、容易出錯,而且交給別人時也很麻煩,所以C語言提供了一個功能,允許我們將常用的代碼以固定的格式封裝(包裝)成一個獨立的模塊,只要知道這個模塊的名字就可以重復使用它,這個模塊就叫做函數(Function)。
函數的本質是一段可以重復使用的代碼,這段代碼被提前編寫好了,放到了指定的文件中,使用時直接調取即可。
示例封裝 strcmp() 函數
#include <stdio.h>//將比較字符串大小的代碼封裝成函數,并命名為strcmp_alias int strcmp_alias(char *s1, char *s2){int i, result;for(i=0; (result = s1[i] - s2[i]) == 0; i++){if(s1[i] == '\0' || s2[i] == '\0'){break;}}return result; }int main(){char str1[] = "http://www.sougou.com";char str2[] = "http://www.baidu.com";char str3[] = "http://www.guge.com";//重復使用strcmp_alias()函數int result_1_2 = strcmp_alias(str1, str2);int result_1_3 = strcmp_alias(str1, str3);printf("str1 - str2 = %d\n", result_1_2);printf("str1 - str3 = %d\n", result_1_3);return 0; }為了避免與原有的 strcmp 產生命名沖突,我將新函數命名為 strcmp_alias。
這是我們自己編寫的函數,放在了當前源文件中(函數封裝和函數使用在同一個源文件中),所以不需要引入頭文件;而C語言自帶的 strcmp() 放在了其它的源文件中(函數封裝和函數使用不在同一個源文件中),并在 string.h 頭文件中告訴我們如何使用,所以我們必須引入 string.h 頭文件。
我們自己編寫的 strcmp_alias() 和原有的 strcmp() 在功能和格式上都是一樣的,只是存放的位置不同,所以一個需要引入頭文件,一個不需要引入。
C語言中的函數和數學中的函數
美國人將函數稱為“Function”。Function 除了有“函數”的意思,還有“功能”的意思,中國人將 Function 譯為“函數”而不是“功能”,是因為C語言中的函數和數學中的函數在使用形式上有些類似,例如:
C語言中有 length = strlen(str)數學中有 y = f(x)你看它們是何其相似,都是通過一定的操作或規則,由一份數據得到另一份數據。
不過從本質上看,將 Function 理解為“功能”或許更恰當,C語言中的函數往往是獨立地實現了某項功能。一個程序由多個函數組成,可以理解為「一個程序由多個小的功能疊加而成」。
庫函數和自定義函數
C語言在發布時已經為我們封裝好了很多函數,它們被分門別類地放到了不同的頭文件中(暫時先這樣認為),使用函數時引入對應的頭文件即可。
C語言自帶的函數稱為庫函數(Library Function)。庫(Library)是編程中的一個基本概念,可以簡單地認為它是一系列函數的集合,在磁盤上往往是一個文件夾。C語言自帶的庫稱為標準庫(Standard Library),其他公司或個人開發的庫稱為第三方庫(Third-Party Library)。
除了庫函數,我們還可以編寫自己的函數,拓展程序的功能。自己編寫的函數稱為自定義函數。自定義函數和庫函數在編寫和使用方式上完全相同,只是由不同的機構來編寫。
參數
函數的一個明顯特征就是使用時帶括號( ),有必要的話,括號中還要包含數據或變量,稱為參數(Parameter)。
示例
strlen(str1)用來計算字符串的長度,str1就是參數。puts("今天會下雨!!!")用來輸出字符串,"今天會下雨"就是參數。返回值
既然函數可以處理數據,那就有必要將處理結果告訴我們,所以很多函數都有返回值(Return Value)。所謂返回值,就是函數的執行結果。
示例
char str1[] = "C Language"; int len = strlen(str1);strlen() 的處理結果是字符串 str1 的長度,是一個整數,我們通過 len 變量來接收。
函數返回值有固定的數據類型(int、char、float等),用來接收返回值的變量類型要一致。
如果感覺不錯的話請點贊喲!!!
總結
- 上一篇: Java三种随机数生成方法
- 下一篇: 论单线程和多线程