新聞中心
??? ???🔥🔥 歡迎來到小林的博客??!
??????🛰?博客主頁:??小林愛敲代碼
??????🛰?專欄:??C語言快速入門
??????🛰?歡迎關(guān)注:👍點贊🙌收藏??留言
??????這篇文章給大家介紹C語言中函數(shù)的使用,本來打算昨天為大家更新的。但是陽了,早上剛掛完點滴,就跑來更新博客了。🌺🌺
??
??????每日一句: 成功不是將來才有的,而是從決定去做的那一刻起,持續(xù)積累而成。桃山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
大綱:

函數(shù)內(nèi)容的大綱:
- 💖7 函數(shù)
- 💪7.2 函數(shù)的聲明和定義
- 🔮7.2.1 函數(shù)的聲明
- 🔮7.2.2 函數(shù)的定義
- 💪7.3 函數(shù)的調(diào)用和傳參
- 🔮7.3.1 函數(shù)的調(diào)用
- 🔮7.3.2 函數(shù)的傳參
- 💪7.4 函數(shù)的返回值
- 💪7.5 函數(shù)的傳址調(diào)用
- 💪7.6 函數(shù)的嵌套調(diào)用
- 💪7.7 函數(shù)的遞歸
- 結(jié)言🥳:
💪7.2 函數(shù)的聲明和定義 🔮7.2.1 函數(shù)的聲明函數(shù)有2類,一類是庫函數(shù),一類是自定義函數(shù),庫函數(shù)就是C語言為我們提供的。例如我們常用的 printf(),scanf(),這些都是C語言為我們提供的庫函數(shù)。自定義函數(shù)則是我們自己定義的函數(shù),自己定義,自己調(diào)用。
函數(shù)的聲明定義格式為: 返回值類型 函數(shù)名(參數(shù)列表);
返回值類型:就是數(shù)據(jù)類型,如果沒有返回值類型則用void。
函數(shù)名:隨意,但在C語言中,函數(shù)名不能重復(fù)。
參數(shù)列表:就是傳給函數(shù)的數(shù)據(jù)。
以下是函數(shù)聲明的例子:
#include//一個無返回值,無參數(shù)的函數(shù)聲明
void a();
//一個無返回值,有1個int參數(shù)的函數(shù)聲明
void b(int a);
//有1個int類型參數(shù)和1個double類型參數(shù) ,且有返回值為int類型的函數(shù)
int c(int a,double d);
int main()
{return 0;
} 函數(shù)的聲明一般會放在.h的頭文件中。
🔮7.2.2 函數(shù)的定義函數(shù)聲明之后,我們需要定義。定義的話就直接把聲明函數(shù)展開。
函數(shù)的定義格式為: 返回值類型 函數(shù)名(參數(shù)列表) { 函數(shù)體;}
函數(shù)定義如下:
#include//一個無返回值,無參數(shù)的函數(shù)聲明
void a();
//一個無返回值,有1個int參數(shù)的函數(shù)聲明
void b(int a);
//有1個int類型參數(shù)和1個double類型參數(shù) ,且有返回值為int類型的函數(shù)
int c(int a,double d);
//函數(shù)a的定義
void a()
{printf("a");
}
//函數(shù)b的定義
void b(int a)
{printf("b");
}
//函數(shù)c的定義
int c(int a, double d)
{printf("c");
//有返回值必須返回一個值
return 0;
}
int main()
{return 0;
} 當(dāng)然,函數(shù)在定義的時候,如果未聲明,會自動聲明。
所以也可以這樣:
#include//函數(shù)a的定義,前面未聲明在此處自動聲明
void a()
{printf("a");
}
//函數(shù)b的定義,前面未聲明在此處自動聲明
void b(int a)
{printf("b");
}
//函數(shù)c的定義,前面未聲明在此處自動聲明
int c(int a, double d)
{printf("c");
//有返回值必須返回一個值
return 0;
}
int main()
{return 0;
} 那么問題來了,既然定義時候會自動聲明,那為什么還要聲明呢?這是因為文件掃描是從上往下的,如果發(fā)現(xiàn)調(diào)用了一個函數(shù),可函數(shù)在下面實現(xiàn)。那么就無法識別到這個函數(shù)。
例如:
#include//函數(shù)a的定義
void a()
{printf("a");
}
int main()
{ a();//調(diào)用函數(shù)a
return 0;
} 這個代碼因為定義在main函數(shù)的前面,所以可以調(diào)用。但是如果定義在main函數(shù)的下面,那么main函數(shù)調(diào)用a函數(shù)時,無法識別到a,就會出錯。
#includeint main()
{ a();//調(diào)用函數(shù)a
return 0;
}
//函數(shù)a的定義
void a()
{printf("a");
} 
所以這時候加上聲明,就可以正常運(yùn)行了。
函數(shù)的調(diào)用很簡單,上面就有演示。
函數(shù)的調(diào)用格式: 函數(shù)名(參數(shù)列表);
參數(shù)列表要和函數(shù)定義時的參數(shù)列表匹配
函數(shù)調(diào)用的例子:
#include//函數(shù) a沒有參數(shù)
void a()
{printf("a");
}
//函數(shù) b有1個int參數(shù)
void b(int b)
{printf("b");
}
int main()
{ a();//函數(shù)名(參數(shù)列表); 但是函數(shù)a沒有參數(shù),所以不用傳參
b(1); //函數(shù)名(int); 因為函數(shù)定義時有1個int類型參數(shù),所以必須傳1個int類型
return 0;
} 🔮7.3.2 函數(shù)的傳參函數(shù)的傳參上面調(diào)用b時也演示過了,就是根據(jù)函數(shù)定義(聲明)時的參數(shù)列表一一對應(yīng)傳參。所以再為大家提供幾個傳參例子。
#include//參數(shù)列表 (int)
void b(int b)
{printf("b");
}
//參數(shù)列表 (int,double,char)
void c(int a,double b , char c)
{printf("b");
}
int main()
{b(1);//傳參列表(int)
c(1,1.1,'a'); //傳參列表(int,double,char);
return 0;
} 不過需要注意的是, 傳參給函數(shù)的參數(shù)叫實參。而函數(shù)接收的參數(shù)叫形參,形參是實參的臨時拷貝,改變形參不會影響實參的值。
#include//參數(shù)列表 (int)
void b(int c)
{c = 5;
}
int main()
{int c = 2;
b(c);//傳參列表(int)
printf("%d ", c);
return 0;
} 如圖,C的值并沒有發(fā)生改變
當(dāng)你期待一個函數(shù)會返回你一個特定的值時,你可以選擇帶返回值的函數(shù)。如果沒有返回值,那么返回值的類型就是void。
假設(shè)我要實現(xiàn)一個Add函數(shù),用來求2個數(shù)的和。
#include//返回值的數(shù)據(jù)類型為int
int Add(int x, int y)
{int z = x + y;
return z;
}
int main()
{int z = Add(3, 5); //用 z 來接收函數(shù)的返回值
printf("%d ", z);
return 0;
} 
如果我們期望改變實參的值,我們可以選擇傳址調(diào)用,傳址調(diào)用就是傳指針給函數(shù)。然后函數(shù)對指針指向的空間進(jìn)行操作。
#includevoid Swap(int* a,int* b)
{int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{int a = 10;
int b = 20;
printf("%d,%d\n", a, b);
Swap(&a, &b);//傳a和b的地址進(jìn)去
printf("%d,%d\n", a, b);
return 0;
} 我們會發(fā)現(xiàn)a 和 b 的值發(fā)生了變化。因為我們給函數(shù)傳的是 a 和 b的地址,而函數(shù)內(nèi)部通過對a 和 b 解引用找到 a和b所在的內(nèi)存空間。從而讓它們進(jìn)行交換。
函數(shù)的嵌套調(diào)用,就是我們在另外一個函數(shù)調(diào)用其他函數(shù)。
#includevoid b()
{printf("b\n");
}
void a()
{printf("a\n");
b(); //a函數(shù)里面調(diào)用 b函數(shù)
}
int main()
{a();//main函數(shù)里面調(diào)用函數(shù)a
return 0;
} 
所以,函數(shù)也是可以嵌套調(diào)用的。
遞歸,棧溢出的罪魁禍?zhǔn)?!什么是遞歸呢?簡單來說,就是函數(shù)自己調(diào)用自己本身。比如以下代碼,main函數(shù)一直調(diào)用自己。如果沒有遞歸的終止條件的話,那么就會出現(xiàn)棧溢出。
#includeint main()
{main();
return 0;
} 
所以在使用遞歸時,我們需要注意兩點,一點是遞歸的結(jié)束條件,還有一點就是這個條件每遞歸一次都要發(fā)生變化。
比如我想實現(xiàn)一個函數(shù),要求把一串?dāng)?shù)字倒著輸出。
#includevoid a(int n)
{//當(dāng)n=0時,遞歸終止
if (n == 0)
{return;
}
printf("%d ", n % 10);
//自己調(diào)用自己
a(n / 10);
}
int main()
{int n = 12345;
a(n);
return 0;
} 
以上程序的遞歸展開圖:
💦💦如果有寫的不好或者錯誤的地方,希望大家指證出來,我會不斷的改正自己的錯誤。💯💯如果感覺寫的還可以,可以點贊三連一波哦~🍸🍸后續(xù)會持續(xù)為大家更新大綱上的內(nèi)容,以及數(shù)據(jù)結(jié)構(gòu),C++,Linux操作系統(tǒng)等方面的知識,本人會堅持持續(xù)更新。
🌺🌺拖著發(fā)燒的身體也要更新!你們的支持是我大的動力,希望在往后的日子里,我們大家一起進(jìn)步?。?!🌺🌺
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站名稱:【C語言】函數(shù)詳解-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://m.biofuelwatch.net/article/despji.html


咨詢
建站咨詢


