詳解C語言之函數
函數的調用
函數調用方式
- 函數語句調用
- 函數表達式調用
- 函數參數調用
sum(); //函數語句調用
result = average * sum(a); //函數表達式調用
此時函數名出現在表達式中,其返回值將作為表達式的算數參與計算。
result = sum(sum1(a)); //函數參數調用
此時函數名出現在另一個函數的參數中,其返回值將作為實參賦值給外函數的形參。
函數嵌套調用
首先在C語言中不允許函數嵌套定義,也就是不許在一個函數內定義一個新函數。
但是C語言允許函數嵌套調用。
void a() { printf("sth"); } void b() { printf("sth2"); a(); }
遞歸調用
C語言的函數都支持遞歸,也就是說,每個函數都可以直接或間接地調用自己。
遞歸實現的原因是函數的每個執(zhí)行過程在棧中都有自己的形參和局部變量的副本,這些副本相對獨立。
假定某個函數調用了一個被調用的函數,再假定被調用的函數反過來調用了調用函數,那么第二個函數就稱為調用函數的遞歸。
使用函數的遞歸需要兩個先決條件,即遞推關系和結束條件。
寫個簡單的函數遞歸:
#include<stdio.h> void number(int a) { int num = a; printf("輸入一個正數:"); scanf("%d",&num); if(num <= 0) { number(num); } else { printf("這個正數是:%d",num); } } int main() { int a; number(a); return 0; }
內部函數與外部函數
函數是C語言程序中的最小實現單位,我們可以把一個函數或者多個函數保存為一個文件,這個文件被稱為源文件。
我們在定義一個函數后,該函數便可被其他函數所調用。
但當一個源程序由多個源文件組成時,我們可以指定函數不能被其他文件調用,這時C語言的函數便分為兩大類,內部函數與外部函數。
內部函數
當某一個函數只能被其所在源文件調用時,他便被稱為內部函數,也叫做靜態(tài)函數。
當一個函數是內部函數時,他便只局限與其所在源文件中,其他源文件就可以有同名函數,并且他們之間互不干擾。
static關鍵字可以將原來的函數修飾成普通函數。
static 返回值類型 函數名(參數列表)
static int number(int a)
外部函數
與內部函數相反,外部函數是可以被其他源文件調用的。
外部函數使用extern關鍵字進行修飾。
一般來說,定義函數時如果沒有使用extern關鍵字,則將默認該函數為默認函數,換言之,extern可以省略。
extern 返回值類型 函數名(參數列表)
extern in number(int a)
局部變量與全局變量
“作用域”:他決定了程序中哪些語句可用哪些不可用,換言之,就是程序的可見性。作用域包括局部作用域和全局作用域。
局部變量具有局部作用域,全局變量具有全局作用域。
局部變量
在一個函數內定義的變量稱為局部變量,我們使用的大多數變量都是局部變量,這些變量的聲明在函數內部,無法被其他函數使用。
函數的形式參數也屬于局部變量,只作用于函數內的所有語句塊。
一般來說,一個局部變量的作用域可以由包含該變量的一對大括號所決定。
全局變量
與局部變量相對,在函數外部進行聲明定義的變量,稱為全局變量。
全局變量不屬于某一個函數,而屬于整個源文件。如果要在其他文件中使用該變量,則需先用extern關鍵字進行引用修飾。
全局變量的作用是增加函數間數據聯系的通道。如果在一個函數中改變了全局變量的值,就能影響到其他函數,這便打通了不同函數之間的通道。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
C++中的三種繼承public,protected,private詳細解析
我們已經知道,在基類以private方式被繼承時,其public和protected成員在子類中變?yōu)閜rivate成員。然而某些情況下,需要在子類中將一個或多個繼承的成員恢復其在基類中的訪問權限2013-09-09