詳解C語(yǔ)言之函數(shù)
函數(shù)的調(diào)用
函數(shù)調(diào)用方式
- 函數(shù)語(yǔ)句調(diào)用
- 函數(shù)表達(dá)式調(diào)用
- 函數(shù)參數(shù)調(diào)用
sum(); //函數(shù)語(yǔ)句調(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語(yǔ)言中不允許函數(shù)嵌套定義,也就是不許在一個(gè)函數(shù)內(nèi)定義一個(gè)新函數(shù)。
但是C語(yǔ)言允許函數(shù)嵌套調(diào)用。
void a()
{
printf("sth");
}
void b()
{
printf("sth2");
a();
}
遞歸調(diào)用
C語(yǔ)言的函數(shù)都支持遞歸,也就是說(shuō),每個(gè)函數(shù)都可以直接或間接地調(diào)用自己。
遞歸實(shí)現(xiàn)的原因是函數(shù)的每個(gè)執(zhí)行過(guò)程在棧中都有自己的形參和局部變量的副本,這些副本相對(duì)獨(dú)立。
假定某個(gè)函數(shù)調(diào)用了一個(gè)被調(diào)用的函數(shù),再假定被調(diào)用的函數(shù)反過(guò)來(lái)調(diào)用了調(diào)用函數(shù),那么第二個(gè)函數(shù)就稱為調(diào)用函數(shù)的遞歸。
使用函數(shù)的遞歸需要兩個(gè)先決條件,即遞推關(guān)系和結(jié)束條件。
寫個(gè)簡(jiǎn)單的函數(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語(yǔ)言程序中的最小實(shí)現(xiàn)單位,我們可以把一個(gè)函數(shù)或者多個(gè)函數(shù)保存為一個(gè)文件,這個(gè)文件被稱為源文件。
我們?cè)诙x一個(gè)函數(shù)后,該函數(shù)便可被其他函數(shù)所調(diào)用。
但當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),我們可以指定函數(shù)不能被其他文件調(diào)用,這時(shí)C語(yǔ)言的函數(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)鍵字可以將原來(lái)的函數(shù)修飾成普通函數(shù)。
static 返回值類型 函數(shù)名(參數(shù)列表)
static int number(int a)
外部函數(shù)
與內(nèi)部函數(shù)相反,外部函數(shù)是可以被其他源文件調(diào)用的。
外部函數(shù)使用extern關(guān)鍵字進(jìn)行修飾。
一般來(lái)說(shuō),定義函數(shù)時(shí)如果沒(méi)有使用extern關(guān)鍵字,則將默認(rèn)該函數(shù)為默認(rèn)函數(shù),換言之,extern可以省略。
extern 返回值類型 函數(shù)名(參數(shù)列表)
extern in number(int a)
局部變量與全局變量
“作用域”:他決定了程序中哪些語(yǔ)句可用哪些不可用,換言之,就是程序的可見性。作用域包括局部作用域和全局作用域。
局部變量具有局部作用域,全局變量具有全局作用域。
局部變量
在一個(gè)函數(shù)內(nèi)定義的變量稱為局部變量,我們使用的大多數(shù)變量都是局部變量,這些變量的聲明在函數(shù)內(nèi)部,無(wú)法被其他函數(shù)使用。
函數(shù)的形式參數(shù)也屬于局部變量,只作用于函數(shù)內(nèi)的所有語(yǔ)句塊。
一般來(lái)說(shuō),一個(gè)局部變量的作用域可以由包含該變量的一對(duì)大括號(hào)所決定。
全局變量
與局部變量相對(duì),在函數(shù)外部進(jìn)行聲明定義的變量,稱為全局變量。
全局變量不屬于某一個(gè)函數(shù),而屬于整個(gè)源文件。如果要在其他文件中使用該變量,則需先用extern關(guān)鍵字進(jìn)行引用修飾。
全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的通道。如果在一個(gè)函數(shù)中改變了全局變量的值,就能影響到其他函數(shù),這便打通了不同函數(shù)之間的通道。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之圖的遍歷(二)
這篇文章主要是介紹了利用廣度優(yōu)先算法實(shí)現(xiàn)圖的遍歷,文中利用圖文詳細(xì)的介紹了實(shí)現(xiàn)步驟,對(duì)我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法有一定的幫助,需要的朋友可以參考一下2021-12-12
詳解C++的反調(diào)試技術(shù)與繞過(guò)手法
反調(diào)試技術(shù),惡意代碼會(huì)用它識(shí)別自身是否被調(diào)試,或者讓調(diào)試器失效,給反病毒工程師們制造麻煩,拉長(zhǎng)提取特征碼的時(shí)間線,本章將具體總結(jié)常見的反調(diào)試基礎(chǔ)的實(shí)現(xiàn)原理以及如何過(guò)掉這些反調(diào)試手段,從而讓我們能夠繼續(xù)分析惡意代碼2021-06-06
C語(yǔ)言中程序環(huán)境和預(yù)處理的詳細(xì)圖文講解
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中程序環(huán)境和預(yù)處理的相關(guān)資料,我們寫的C語(yǔ)言代碼,從運(yùn)行,到在屏幕上生成結(jié)果,經(jīng)歷了比較復(fù)雜的過(guò)程,需要的朋友可以參考下2023-02-02
C語(yǔ)言學(xué)習(xí)之函數(shù)知識(shí)總結(jié)
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)。本文就為大家詳細(xì)講講C語(yǔ)言中函數(shù)的相關(guān)知識(shí)點(diǎn),希望有所幫助2022-07-07
c++項(xiàng)目中后綴名vcxproj和sln的區(qū)別及說(shuō)明
這篇文章主要介紹了c++項(xiàng)目中后綴名vcxproj和sln的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

