函数的应用及其解析大全!
說到函數首先我們要明白函數的作用。函數可以將其理解為一個封裝特定功能的集合體,起到簡化主函數內容的作用,如果對程序有一定了解的話會知道,最后一個比較大的程序往往分為三部分,第一主函數部分,第二實現部分,第三聲明部分。我們會習慣性的將代碼放到實現部分,在聲明部分進行聲明,最后在主函數部分進行使用。如果將所有內容都放到主函數中會感到內容很雜亂無章。因此我們可以利用函數進行主函數內容的簡化。
第一步我們來認識一下函數的基本結構一個函數所包括的部分包括
1.返回類型
2.函數名稱(函數名可以自己隨便定義,盡量有意義)
3.函數所傳的參數
4.函數的主體內容
5.如果有返回類型需要一個相應的返回值
大致內容如下:
#include<stdio.h> void print(int *arr,int sz) {int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);} } int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);print(arr,sz);return 0; }//void表示不需要返回值,如果為int則返回一個整數,如果為char則返回一個字符,根據需要進行判斷 //print為其函數名,通常以其目的進行命名 //括號里的內容為上傳的參數類型,arr的首地址為指針類型,sz為整數,上傳的參數需要與主函數內容相對應 //大括號里面的內容為函數的主體內容,也就是分裝的函數 //該函數由于是void所以不需要返回類型 #include<stdio.h> int my_strlen(char* ch, int sz) {int i = 0;int count = 0;while (ch[i]!='\0'){i++;count++;}return count; } int main() {char ch[10] = "abcdefg";int sz = sizeof(ch) / sizeof(ch[0]);int ret=my_strlen(ch, sz);printf("%d", ret);return 0; } //上面的代碼返回值為一個整形,所以最后要有return值得我們注意的是,在主函數中使用的函數,函數名稱要和自己創建的函數一致,所上傳的參數也應該與上面創建的函數傳參類型一致,否則就會報錯,使得程序異常。?
第一類:void函數和return函數
那么接下來我們就來詳細進行一下函數的介紹。函數按返回值分可以分為void函數以及return函數。void函數不需要返回值,所以前面用void進行表明。而return函數在程序結束的時候會需要返回相應的類型。
1.void函數
這類函數我們可以直接使用它進行相應的打印操作,比如我們需要打印許多內容將其全部放到主函數中感覺很麻煩,那么我們就會分裝一個void函數,進行相應的內容的打印。舉個例子:
#include<stdio.h> void print(int *arr,int sz) {int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);} } int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);print(arr,sz);return 0; }?2.return函數
return函數可以大致分為返回int,返回float,返回char。我們可以通過函數的返回值進行判斷進一步操作。
#include<stdio.h> int my_strlen(char* ch, int sz) {int i = 0;int count = 0;while (ch[i]!='\0'){i++;count++;}return count; } int main() {char ch[10] = "abcdefg";int sz = sizeof(ch) / sizeof(ch[0]);int ret=my_strlen(ch, sz);printf("%d", ret);return 0; }上面的程序作用是模擬strlen來計算字符串的長度。由我們返回的數字可以直接得出字符串的長度,返回值為一個整型。下面是返回一個字符的函數表達,同樣的浮點數的返回應用也與他們相同自己去試試吧!要靈活應用函數的返回值,這樣可以省不少時間。
#include<stdio.h> char choice(void) {char ch = 0;scanf("%c", &ch);return ch; } int main() {char ch=choice();switch (ch){case '*':printf("今天很開心\n");break;case '#':printf("程序也不太難嘛");break;}return 0; }第二類:傳值函數與傳址函數?
上面我們說了第一類函數的分類,那么接下來我們來根據第二類上傳數據進行分類——傳值函數和傳址函數。
那我們的數組舉例子,我們應該知道你把一個數組作為參數上傳給一個函數之后函數所接收到的是這個數組的首地址(不太理解的可以在本人的博客中查找并閱讀數組與結構體詳解一章的內容,相信會對你有很大的幫助)那么我們函數所定義的參數類型要與之相對應。也應該是一個指針也就是接收地址的地方。這一類的函數我們把它稱作傳址函數,那么其他的直接上傳一個數值的函數我們將他們叫做傳值函數。
需要重點強調的是,函數是一個相對獨立的單位,在其中改變的內容如果是傳值調用的話不會對主函數的真實值進行改變,而傳址函數就不同了,他會找到該數據在主函數中所取得地址并進行數據的改寫。那么我們就需要仔細考慮一下什么時候使用傳值函數什么時候使用傳址函數了。
void change(int* i) {*i = 10; } int main() {int i = 0;change(&i);printf("%d", i);return 0; } //傳址函數可以在函數中改變主函數的變量內容。 #include<stdio.h> void change(int i) {i = 10; } int main() {int i = 0;change(i);printf("%d", i);return 0; }如上圖所示,可以顯著地發現傳值函數和傳址函數的區別。
重點!!函數的遞歸!!
函數的遞歸一定是函數這一部分的重難點,相信大家一定都或多或少的被函數的遞歸困擾過。在這里我就來帶領大家解決這個難題。由于要講清楚內容過長所以我們將會在一片全新的博客中講述,你可以點擊下面的鏈接進行查看,包教包會哦。
http://t.csdn.cn/aX4IK
此上就是本篇博客的全部內容祝你天天開心。
總結
以上是生活随笔為你收集整理的函数的应用及其解析大全!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 线程函数(类成员函数作为线程函数
- 下一篇: 微信小程序学习记录——4.框架-视图层