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