詳解C語言之函數(shù)
函數(shù)的調(diào)用
函數(shù)調(diào)用方式
- 函數(shù)語句調(diào)用
- 函數(shù)表達(dá)式調(diào)用
- 函數(shù)參數(shù)調(diào)用
sum(); //函數(shù)語句調(diào)用
result = average * sum(a); //函數(shù)表達(dá)式調(diào)用
此時(shí)函數(shù)名出現(xiàn)在表達(dá)式中,其返回值將作為表達(dá)式的算數(shù)參與計(jì)算。
result = sum(sum1(a)); //函數(shù)參數(shù)調(diào)用
此時(shí)函數(shù)名出現(xiàn)在另一個(gè)函數(shù)的參數(shù)中,其返回值將作為實(shí)參賦值給外函數(shù)的形參。
函數(shù)嵌套調(diào)用
首先在C語言中不允許函數(shù)嵌套定義,也就是不許在一個(gè)函數(shù)內(nèi)定義一個(gè)新函數(shù)。
但是C語言允許函數(shù)嵌套調(diào)用。
void a() { printf("sth"); } void b() { printf("sth2"); a(); }
遞歸調(diào)用
C語言的函數(shù)都支持遞歸,也就是說,每個(gè)函數(shù)都可以直接或間接地調(diào)用自己。
遞歸實(shí)現(xiàn)的原因是函數(shù)的每個(gè)執(zhí)行過程在棧中都有自己的形參和局部變量的副本,這些副本相對獨(dú)立。
假定某個(gè)函數(shù)調(diào)用了一個(gè)被調(diào)用的函數(shù),再假定被調(diào)用的函數(shù)反過來調(diào)用了調(diào)用函數(shù),那么第二個(gè)函數(shù)就稱為調(diào)用函數(shù)的遞歸。
使用函數(shù)的遞歸需要兩個(gè)先決條件,即遞推關(guān)系和結(jié)束條件。
寫個(gè)簡單的函數(shù)遞歸:
#include<stdio.h> void number(int a) { int num = a; printf("輸入一個(gè)正數(shù):"); scanf("%d",&num); if(num <= 0) { number(num); } else { printf("這個(gè)正數(shù)是:%d",num); } } int main() { int a; number(a); return 0; }
內(nèi)部函數(shù)與外部函數(shù)
函數(shù)是C語言程序中的最小實(shí)現(xiàn)單位,我們可以把一個(gè)函數(shù)或者多個(gè)函數(shù)保存為一個(gè)文件,這個(gè)文件被稱為源文件。
我們在定義一個(gè)函數(shù)后,該函數(shù)便可被其他函數(shù)所調(diào)用。
但當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),我們可以指定函數(shù)不能被其他文件調(diào)用,這時(shí)C語言的函數(shù)便分為兩大類,內(nèi)部函數(shù)與外部函數(shù)。
內(nèi)部函數(shù)
當(dāng)某一個(gè)函數(shù)只能被其所在源文件調(diào)用時(shí),他便被稱為內(nèi)部函數(shù),也叫做靜態(tài)函數(shù)。
當(dāng)一個(gè)函數(shù)是內(nèi)部函數(shù)時(shí),他便只局限與其所在源文件中,其他源文件就可以有同名函數(shù),并且他們之間互不干擾。
static關(guān)鍵字可以將原來的函數(shù)修飾成普通函數(shù)。
static 返回值類型 函數(shù)名(參數(shù)列表)
static int number(int a)
外部函數(shù)
與內(nèi)部函數(shù)相反,外部函數(shù)是可以被其他源文件調(diào)用的。
外部函數(shù)使用extern關(guān)鍵字進(jìn)行修飾。
一般來說,定義函數(shù)時(shí)如果沒有使用extern關(guān)鍵字,則將默認(rèn)該函數(shù)為默認(rèn)函數(shù),換言之,extern可以省略。
extern 返回值類型 函數(shù)名(參數(shù)列表)
extern in number(int a)
局部變量與全局變量
“作用域”:他決定了程序中哪些語句可用哪些不可用,換言之,就是程序的可見性。作用域包括局部作用域和全局作用域。
局部變量具有局部作用域,全局變量具有全局作用域。
局部變量
在一個(gè)函數(shù)內(nèi)定義的變量稱為局部變量,我們使用的大多數(shù)變量都是局部變量,這些變量的聲明在函數(shù)內(nèi)部,無法被其他函數(shù)使用。
函數(shù)的形式參數(shù)也屬于局部變量,只作用于函數(shù)內(nèi)的所有語句塊。
一般來說,一個(gè)局部變量的作用域可以由包含該變量的一對大括號所決定。
全局變量
與局部變量相對,在函數(shù)外部進(jìn)行聲明定義的變量,稱為全局變量。
全局變量不屬于某一個(gè)函數(shù),而屬于整個(gè)源文件。如果要在其他文件中使用該變量,則需先用extern關(guān)鍵字進(jìn)行引用修飾。
全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的通道。如果在一個(gè)函數(shù)中改變了全局變量的值,就能影響到其他函數(shù),這便打通了不同函數(shù)之間的通道。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++中的三種繼承public,protected,private詳細(xì)解析
我們已經(jīng)知道,在基類以private方式被繼承時(shí),其public和protected成員在子類中變?yōu)閜rivate成員。然而某些情況下,需要在子類中將一個(gè)或多個(gè)繼承的成員恢復(fù)其在基類中的訪問權(quán)限2013-09-09C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析
這篇文章主要介紹了C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析,delete和==以及!=運(yùn)算符的使用是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01C++?qsort函數(shù)排序與冒泡模擬實(shí)現(xiàn)流程詳解
qsort是一個(gè)庫函數(shù),基于快速排序算法實(shí)現(xiàn)的一個(gè)排序的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言qsort()函數(shù)使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10C++中rapidjson將map轉(zhuǎn)為json的方法
今天小編就為大家分享一篇關(guān)于C++中rapidjson將map轉(zhuǎn)為json的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04