C語言之函數(shù)

函數(shù)的意義

  1. 函數(shù)解決了代碼段復(fù)用的問題:相同功能的代碼段可以直接重復(fù)使用,相似的或者僅僅是某個參數(shù)不同的依疼,可以用帶參數(shù)的函數(shù)解決妹蔽。
  2. 函數(shù)減少了代碼的總長度聪黎,因為重復(fù)的只出現(xiàn)一次。
  3. 函數(shù)讓主調(diào)用代碼或主調(diào)用函數(shù)的結(jié)構(gòu)更加清晰忘渔。
  4. 當(dāng)軟件開發(fā)是多個人時高帖,相互之間可以通過函數(shù)調(diào)用提高開發(fā)效率。

函數(shù)的定義和使用

函數(shù)是一塊代碼畦粮,接受零個多個參數(shù)散址,做一件事情,并返回零個一個值宣赔。

函數(shù)的定義

<返回類型> 函數(shù)名稱([<參數(shù)類型> 參數(shù)名稱, ...]) // 函數(shù)頭:返回值類型预麸,函數(shù)名稱,參數(shù)表
{
  函數(shù)體
}

注意

  1. 沒有返回值的函數(shù)
  • 函數(shù)沒有返回值儒将,使用void進行標(biāo)識吏祸;即void 函數(shù)名(參數(shù)列表)
  • 不能使用帶值的return,也可以沒有return語句
  • 調(diào)用沒有返回值的函數(shù)時钩蚊,不能進行賦值操作

2.有返回值的函數(shù)

  • 函數(shù)體內(nèi)必須有帶值的return語句

函數(shù)調(diào)用

函數(shù)名稱(函數(shù)的yi參數(shù)表);

注意

  • 調(diào)用函數(shù)時贡翘,()起到了表示函數(shù)調(diào)用的重要作用,即使沒有參數(shù)也需要()砰逻。
  • 函數(shù)如果有參數(shù)鸣驱,調(diào)用時,需要給出正確的數(shù)量和順序蝠咆。
  • 當(dāng)函數(shù)有返回值時踊东,return為函數(shù)返回標(biāo)記,return關(guān)鍵字停止函數(shù)的執(zhí)行,并返回一個值递胧。
  • 一個函數(shù)中可以出現(xiàn)多個return語句

函數(shù)的參數(shù)和變量

函數(shù)的原型

對于C語言編譯器來說是自上而下順序分析程序猿編寫的代碼碑韵,因此函數(shù)有先后關(guān)系。
在進行函數(shù)調(diào)用時缎脾,必須要知道函數(shù)的基本信息:返回值祝闻、函數(shù)名稱、參數(shù)個數(shù)遗菠、參數(shù)類型联喘、參數(shù)順序,為了解決這個問題辙纬,主要有兩種方式:

  1. 函數(shù)定義在函數(shù)調(diào)用之前豁遭;
  2. 通過函數(shù)原型進行聲明。

函數(shù)原型的語法:
使用函數(shù)頭贺拣,并以分號;結(jié)尾蓖谢,就構(gòu)成了函數(shù)的原型

函數(shù)原型的目的:
告訴編譯器函數(shù)的基本信息:名稱、參數(shù)(數(shù)量及類型)譬涡、返回值類型

注意

  1. 函數(shù)調(diào)用時闪幽,會根據(jù)函數(shù)原型進行自動類型轉(zhuǎn)換。
  2. 函數(shù)原型的位置建議放在頭文件之后(也可以放在對應(yīng)函數(shù)體內(nèi)的首行涡匀,但是不推薦)盯腌。
  3. 函數(shù)原型中可以將函數(shù)參數(shù)名省略掉,但是為了程序的可讀性陨瘩,建議函數(shù)聲明與函數(shù)定義時的函數(shù)頭保持一致腕够。

參數(shù)傳遞

如果函數(shù)有參數(shù),進行函數(shù)調(diào)用時必須傳遞給它數(shù)量舌劳、類型正確的值(實參)帚湘。
值(實參)的類型有:

  1. 字面量
  2. 變量
  3. 函數(shù)的返回值
  4. 計算的結(jié)果
  • 當(dāng)傳遞的參數(shù)的類型不匹配時,將怎么辦蒿囤?
    調(diào)用函數(shù)時給的值與參數(shù)的類型不匹配是C語言傳統(tǒng)的漏洞客们,C語言的編譯器總是會進行自動類型轉(zhuǎn)換,以至于最終的結(jié)果往往不符合預(yù)期材诽。

  • 函數(shù)調(diào)用時底挫,傳遞過去的內(nèi)容是什么?
    C語言在調(diào)用函數(shù)時脸侥,傳遞的內(nèi)容是值建邓。
    傳值過程中,有如下注意事項:

  1. 每個函數(shù)都有自己的變量空間睁枕,參數(shù)(形參)也位于這個獨立的空間中官边,和其他函數(shù)沒有關(guān)系沸手。
  2. 形式參數(shù)(參數(shù));實際參數(shù)(值)

本地變量

函數(shù)的每次運行會產(chǎn)生一個獨立的變量空間注簿,在這個空間中的變量契吉,是函數(shù)的這次運行獨有的,稱作本地變量诡渴。函數(shù)中的參數(shù)也是本地變量捐晶。
本地變量的性質(zhì):

  • 生存期:什么時候這個變量開始出現(xiàn)了,到什么時候它消亡了妄辩。
  • 作用域:在代碼的什么范圍內(nèi)可以訪問這個變量(這個變量可以起作用)
    區(qū)分規(guī)則:大括號{}——塊

本地變量的規(guī)則:

  • 本地變量是定義在塊內(nèi)的
    定義在函數(shù)的塊內(nèi)
    定義在語句的塊內(nèi)
    定義在某一對大括號內(nèi)
  • 程序運行進入這個塊之前惑灵,其中的變量不存在,離開這個塊后就消失了
  • 塊外面定義的變量在塊內(nèi)仍然有效
  • 塊內(nèi)定義的變量覆蓋了塊外同名的變量
  • 不能在同一個塊內(nèi)定同名的變量
  • 本地變量不會默認(rèn)初始化

函數(shù)小細(xì)節(jié)

沒有參數(shù)的函數(shù)

定義沒有參數(shù)的函數(shù)時眼耀,使用如下:

// 函數(shù)聲明
<返回值類型> 函數(shù)名稱(void)英支;
// 函數(shù)定義
<返回值類型> 函數(shù)名稱(void) {
  函數(shù)體
}

<返回值類型> 函數(shù)名稱();參數(shù)列表位置表什么也沒有寫,它表示參數(shù)的參數(shù)表未知哮伟,并不表示沒有參數(shù)干花。

#include <stdio.h>

void print(int a, int b);

int main() 
{
    int a, b;
    a = 5;
    b = 6;
    print(a, b); // 正常輸出:第一個參數(shù):5, 第二個參數(shù):6
    return 0;
} 

void print(int a, int b)
{
    printf("第一個參數(shù):%d, 第二個參數(shù):%d\n", a, b);
}

進行如下修改:

#include <stdio.h>

void print();

int main() 
{
    int a, b;
    a = 5;
    b = 6;
    print(a, b); // 編譯時報錯或運行時出現(xiàn)bug
    return 0;
} 

void print(double a, double b)
{
    printf("第一個參數(shù):%lf, 第二個參數(shù):%lf\n", a, b);
}

部分編譯器直接報錯,部分編譯器將能夠運行澈吨,但是運行結(jié)果錯誤把敢,出現(xiàn)bug

逗號運算符 VS 函數(shù)調(diào)用時的逗號

  • 函數(shù)調(diào)用時的逗號表示標(biāo)點符號
  • 逗號運算符表示一個運算符

函數(shù)里的函數(shù)

C語言中不允許函數(shù)嵌套定義,但是可以進行在某個函數(shù)內(nèi)進行函數(shù)聲明谅辣。

關(guān)于main函數(shù)

C語言中main()函數(shù)是程序的入口函數(shù),這個是針對程序猿來說的婶恼。對于整個程序來說桑阶,main函數(shù)不是程序運行的首條指令。
main函數(shù)中的return信息是有效的勾邦,返回0表示正常結(jié)束蚣录;返回非0表示異常結(jié)束。main函數(shù)的return信息是在編寫批處理文件(如.sh眷篇,.bat等文件)時使用萎河。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蕉饼,隨后出現(xiàn)的幾起案子虐杯,更是在濱河造成了極大的恐慌,老刑警劉巖昧港,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擎椰,死亡現(xiàn)場離奇詭異,居然都是意外死亡创肥,警方通過查閱死者的電腦和手機达舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門值朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人巩搏,你說我怎么就攤上這事昨登。” “怎么了贯底?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵丰辣,是天一觀的道長。 經(jīng)常有香客問我丈甸,道長糯俗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任睦擂,我火速辦了婚禮得湘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顿仇。我一直安慰自己淘正,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布臼闻。 她就那樣靜靜地躺著鸿吆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪述呐。 梳的紋絲不亂的頭發(fā)上惩淳,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音乓搬,去河邊找鬼思犁。 笑死,一個胖子當(dāng)著我的面吹牛进肯,可吹牛的內(nèi)容都是我干的激蹲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼江掩,長吁一口氣:“原來是場噩夢啊……” “哼学辱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起环形,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤策泣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斟赚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着降,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年拗军,在試婚紗的時候發(fā)現(xiàn)自己被綠了任洞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓄喇。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖交掏,靈堂內(nèi)的尸體忽然破棺而出妆偏,到底是詐尸還是另有隱情,我是刑警寧澤盅弛,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布钱骂,位于F島的核電站,受9級特大地震影響挪鹏,放射性物質(zhì)發(fā)生泄漏见秽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一讨盒、第九天 我趴在偏房一處隱蔽的房頂上張望解取。 院中可真熱鬧,春花似錦返顺、人聲如沸禀苦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振乏。三九已至,卻和暖如春秉扑,著一層夾襖步出監(jiān)牢的瞬間慧邮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工舟陆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赋咽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓吨娜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淘钟。 傳聞我的和親對象是個殘疾皇子宦赠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一. 函數(shù)的三要素 1. 函數(shù)的聲明 2. 函數(shù)的返回值 3. 函數(shù)體 Eg: int sumf(int a , ...
    CarsonChen閱讀 422評論 0 0
  • 函數(shù): 如何定義函數(shù):[ 一個程序必須有且只能存在一個主函數(shù) ] 主函數(shù)可以調(diào)用普通函數(shù) 普通函數(shù)不能調(diào)用主函數(shù) ...
    深藍碎片_閱讀 449評論 0 0
  • 一. 函數(shù)指針的定義 1. 函數(shù)的作用:完成某一特定功能的代碼片段的封裝. 2. 函數(shù)的定義: 返回值類型,函數(shù)名...
    CarsonChen閱讀 432評論 0 0
  • 函數(shù)定義 C語言程序框架C語言程序的框架有兩種: 注意:1.一個源程序文件可由一個或多個函數(shù)組成之函數(shù)2.一個C語...
    keeeeeenon閱讀 742評論 0 3
  • 1一個函數(shù)僅完成一件功能 2重復(fù)代碼應(yīng)該盡可能提煉成函數(shù) 3避免函數(shù)過長新增函數(shù)盡量不超過50行非空非注釋行 4避...
    楓馨蕊閱讀 1,009評論 0 0