C語言深入了解函數(shù)
1. 函數(shù)的概念
函數(shù)是c語言的功能單位,實現(xiàn)一個功能可以封裝一個函數(shù)來實現(xiàn)。
定義函數(shù)的時候一切以功能為目的,根據(jù)功能去定函數(shù)的參數(shù)和返回值。 函數(shù)就是將特定功能的代碼封裝在一個函數(shù)內(nèi)部,當(dāng)使用這些代碼時,只需要調(diào)用函數(shù)即可。
2. 函數(shù)的分類
從定義角度分
- 庫函數(shù)(即函數(shù)是誰實現(xiàn)的)
- 自定義函數(shù)
- 系統(tǒng)調(diào)用(操作系統(tǒng)實現(xiàn)的函數(shù))
從參數(shù)角度分類
有參函數(shù):函數(shù)有一個或多個形參(參數(shù)類型隨便)
int fun(int a ,float b,double c){ }
無參函數(shù):函數(shù)沒有參數(shù),在形參列表的位置寫void或什么都不寫
int fun(void) { }或 int fun( ){ }
從返回值角度分
帶返回值的函數(shù):在定義函數(shù)的時候,必須帶著返回值類型,在函數(shù)體里,必須有return,如果沒有返回值類型,默認(rèn)返回整型。
無返回值函數(shù):函數(shù)名前加void,return可以寫也可以不寫,寫的時候后面加一個分號即return;
3. 函數(shù)的定義
定義方法:
格式如下
返回值類型 函數(shù)名字(形參列表,用逗號分隔開) {
//函數(shù)體,函數(shù)的功能在函數(shù)體里實現(xiàn)
}
int max(int a,int b)
{
int z;
if (x>y){
z = x;
}
else{
z = y;
}
return z;
}
注意:函數(shù)名字是標(biāo)識符,所以要滿足標(biāo)識符的命名規(guī)則
return 后面跟的變量類型必須與函數(shù)名左邊的類型一致
在一個程序中,相同的函數(shù)名只能出現(xiàn)依次
#include<stdio.h>
// 定義一個沒有參數(shù)也沒有返回值的函數(shù)
void myfunc1(){
printf("哇哦哇哦\n");
return ;
}
//定義一個無返回值,有參數(shù)的函數(shù)
void myfunc2(int a,int b){
int sum;
sum = a + b;
printf("%d + %d = %d\n",a,b,sum);
}
//定義一個有返回值,有參數(shù)的函數(shù)
int myfunc3(int a,int b){
int sum;
sum = a + b;
return sum;
}
int main(){
// 調(diào)用函數(shù)myfunc1
// 調(diào)用的時候不用加返回值類型
myfunc1();
return 0;
}4. 函數(shù)的聲明
概念:對已經(jīng)定義的函數(shù),進(jìn)行說明,函數(shù)可以多次聲明
為什么要進(jìn)行聲明? 有些情況下,如果不對函數(shù)進(jìn)行聲明,編譯器在編譯的時候,可能不認(rèn)識這個函數(shù),因為編譯器在編譯c程序的時候,是從上往下編譯的。
- 主調(diào)函數(shù)和被調(diào)函數(shù)在同一個.c文件中的時候:
(1)被調(diào)函數(shù)在上,主調(diào)函數(shù)在下,不需要聲明,即下面的函數(shù)可以調(diào)用上面的函數(shù)
(2)被調(diào)函數(shù)在下,主調(diào)函數(shù)在上,需要聲明。
對于一些高級的編譯器,不用聲明也能調(diào)用函數(shù),但是會彈出很多warning。
聲明的方式
1.直接聲明法:將被調(diào)用的函數(shù)的定義拷貝過去,后面加分號,如下例:
#include<stdio.h>
void myfunc1(); // 直接聲明
int main(){
myfunc1();
return 0;
}
void myfunc1(){
printf("哇哦哇哦\n");
return ;
}
2.間接聲明:將函數(shù)的聲明放在頭文件中, .c程序包含頭文件即可(例子待補充…)
- 主調(diào)函數(shù)和被調(diào)函數(shù)在不同一個.c文件中的時候:
一定要聲明?。。?/p>
聲明的方式
1.直接聲明:將被調(diào)用的函數(shù)的定義拷貝過去,后面加分號,前面加 extern
2.間接聲明:將函數(shù)的聲明放在頭文件中, .c程序包含頭文件即可
5. 函數(shù)的調(diào)用
變量=函數(shù)名(實參列表); // 帶返回值的
函數(shù)名(實參列表); // 不帶返回值的
推薦閱讀:《形參和實參的區(qū)別》
#include<stdio.h>
int sum(int a,int b){ // 定義帶返回值的函數(shù),定義的時候是形參
int sum = a + b;
return sum;
}
void func(){
printf("我是無返回值函數(shù)!\n");
printf("我是老六~\n");
return;
}
int main(){
int re = sum(1,2); // 調(diào)用帶返回值的函數(shù),調(diào)用的時候是實參,定義一個int類型的變量re來接收sum函數(shù)返回的結(jié)果
printf("結(jié)果是:%d\n",re);
func(); // 調(diào)用無返回值函數(shù)
return 0;
}6. 遞歸函數(shù)
自己調(diào)用自己的函數(shù)叫做遞歸函數(shù)
遞歸函數(shù)調(diào)用會在計算機(jī)里同時存在多個,其中最后一個是當(dāng)前正在工作的那個。
一個非常復(fù)雜的問題,如果可以拆分成多個小問題,其中至少有一個小問題和原來的問題本質(zhì)上一樣,只是規(guī)模小一些,就可以采用遞歸來解決。
編寫原則
首先要在遞歸函數(shù)中編寫語句描述問題的拆分方式
在遞歸函數(shù)的開始編寫分支解決不再拆分的情況(這種情況必須保證程序可以結(jié)束)
到此這篇關(guān)于C語言深入了解函數(shù)的文章就介紹到這了,更多相關(guān)C語言函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++連接mysql的方法(直接調(diào)用C-API)
首先安裝mysql,點完全安裝,才能在在安裝目錄include找到相應(yīng)的頭文件,注意,是完全安裝,需要的朋友可以參考下2017-06-06
詳談全排列next_permutation() 函數(shù)的用法(推薦)
下面小編就為大家?guī)硪黄斦勅帕衝ext_permutation() 函數(shù)的用法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
C++ 手把手教你實現(xiàn)可變長的數(shù)組實現(xiàn)
這篇文章主要介紹了C++ 手把手教你實現(xiàn)可變長的數(shù)組實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Qt音視頻開發(fā)之利用ffmpeg實現(xiàn)倍速播放
這篇文章主要為大家詳細(xì)介紹了在Qt音視頻開發(fā)中如何利用ffmpeg實現(xiàn)倍速播放功能(半倍速/2倍速/4倍速/8倍速),感興趣的小伙伴可以了解一下2022-11-11

