- 相關(guān)推薦
如何快速掌握C語言函數(shù)
C源程序是由函數(shù)組成的。最簡單的程序有一個主函數(shù) main(),但實用程序往往由多個函數(shù)組成,由 主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。函數(shù)是C源程序的基本模塊,程序的許多功能是通過對 函數(shù)模塊的調(diào)用來實現(xiàn)的,學(xué)會編寫和調(diào)用函數(shù)可以提高編程效率。下面是小編為大家?guī)淼娜绾慰焖僬莆誄語言函數(shù)的知識,歡迎閱讀。
1、函數(shù)的定義
C源程序是由函數(shù)組成的。最簡單的程序有一個主函數(shù) main(),但實用程序往往由多個函數(shù)組成,由 主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。函數(shù)是C源程序的基本模塊,程序的許多功能是通過對 函數(shù)模塊的調(diào)用來實現(xiàn)的,學(xué)會編寫和調(diào)用函數(shù)可以提高編程效率。
函數(shù)的定義通常包含以下內(nèi)容:
類型 函數(shù)名(形參表說明) /*函數(shù)首部*/
{
說明語句 /*函數(shù)體*/
執(zhí)行語句
}
對上面的定義形式進(jìn)行以下說明:
(1)“類型”是指函數(shù)返回值的類型。函數(shù)返回值不能是數(shù)組,也不能是函數(shù),除此之外任何合法的數(shù)據(jù)類型都可以是函數(shù)的類型,如:int,long,float,char 等。函數(shù)類型可以省略,當(dāng)不指明函數(shù)類型時,系統(tǒng)默認(rèn)的是整型。
(2)函數(shù)名是用戶自定義的標(biāo)識符,在 C 語言函數(shù)定義中不可省略,須符合 C 語言對標(biāo)識符的規(guī)范, 用于標(biāo)識函數(shù),并用該標(biāo)識符調(diào)用函數(shù)。另外函數(shù)名本身也有值,它代表了該函數(shù)的入口地址,使用指針 調(diào)用函數(shù)時,將用到此功能。
(3)形參又稱為“形式參數(shù)”。形參表是用逗號分隔的一組變量說明,包括形參的類型和形參的標(biāo)識 符,其作用是指出每一個形參的類型和形參的名稱,當(dāng)調(diào)用函數(shù)時,接收來自主調(diào)函數(shù)的數(shù)據(jù),確定各參 數(shù)的值。
(4)用{ }括起來的部分是函數(shù)的主體,稱為函數(shù)體。函數(shù)體是一段程序,確定該函數(shù)應(yīng)完成的規(guī)定的 運(yùn)算,應(yīng)執(zhí)行的規(guī)定的動作,集中體現(xiàn)了函數(shù)的功能。函數(shù)內(nèi)部應(yīng)有自己的說明語句和執(zhí)行語句,但函數(shù) 內(nèi)定義的變量不可以與形參同名;ɡㄌ杮 }是不可以省略的。
根據(jù)函數(shù)定義的一般形式,可以定義一個最簡單的函數(shù):
add()
{
;
}
這是 C 語言中一個合法的函數(shù),函數(shù)名為 add。它沒有函數(shù)類型說明,也沒有形參表,同時函數(shù)體內(nèi) 也沒有語句。實際上函數(shù) add 不執(zhí)行任何操作和運(yùn)算,它是一個空函數(shù),在一般情況下是沒有用途的,但 在程序開發(fā)的過程中有時是需要的,常用來代替尚未開發(fā)完畢的函數(shù)。
2、函數(shù)的調(diào)用
主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為函數(shù)調(diào)用。在 C 語言中,只有在函數(shù)調(diào)用時,函數(shù)體中定義的功 能才會被執(zhí)行。C語言中,函數(shù)調(diào)用的一般形式為:
函數(shù)名(類型 形參,類型 形參...);
對無參函數(shù)調(diào)用時則無實際參數(shù)表。實際參數(shù)表中的參數(shù)可以是常數(shù)、變量或其他構(gòu)造類型數(shù)據(jù)及表 達(dá)式,各實參之間用逗號分隔。
在C語言中,可以用以下幾種方式調(diào)用函數(shù)。
(1)函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種 方式要求函數(shù)是有返回值的。例如:
z=max(x,y);是一個賦值表達(dá)式,把 max 的返回值賦予變量 z。
(2)函數(shù)語句:函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。
例如:
printf ("%d",a);
scanf ("%d",&b);
都是以函數(shù)語句的方式調(diào)用函數(shù)。
(3)函數(shù)實參:函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實參進(jìn) 行傳送,因此要求該函數(shù)必須是有返回值的。例如:
1printf("%d",max(x,y)); /*把 max 調(diào)用的返回值作為 printf 函數(shù)的實參*/
在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對該被調(diào)函數(shù)進(jìn)行聲明。在主調(diào)函數(shù)中對被調(diào)函數(shù)進(jìn)行說明的目的是
使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以便在主調(diào)函數(shù)中按此種類型對返回值進(jìn)行相應(yīng)的處理。其一般
形式為:
類型說明符 被調(diào)函數(shù)名(類型 形參,類型 形參...);
需要注意的是,函數(shù)的聲明和函數(shù)的定義有本質(zhì)上的不同。主要區(qū)別在以下兩個方面:
(1)函數(shù)的定義是編寫一段程序,應(yīng)有函數(shù)的具體功能語句——函數(shù)體;而函數(shù)的聲明僅是向編譯系 統(tǒng)的一個說明,不含具體的執(zhí)行動作。
(2)在程序中,函數(shù)的定義只能有一次,而函數(shù)的聲明可以有多次。
3、變量的存儲類型
在 C 語言中,變量是對程序中數(shù)據(jù)所占內(nèi)存空間的一種抽象定義,定義變量時,用戶定義變量的名、 變量的類型,這些都是變量的操作屬性。不僅可以通過變量名訪問該變量,系統(tǒng)還通過該標(biāo)識符確定變量 在內(nèi)存中的位置。在計算機(jī)中,保存變量當(dāng)前值的存儲單元有兩類,一類是內(nèi)存,另一類是 CPU 的寄存 器。變量的存儲類型關(guān)系到變量的存儲位置,C 語言中定義了 4 種存儲屬性,即自動變量、外部變量、靜 態(tài)變量和寄存器變量,它關(guān)系到變量在內(nèi)存中的存放位置, 由此決定了變量的保留時間和變量的作用范圍。
變量的保留時間又稱為生存期,從時間的角度,可將變量分為靜態(tài)存儲和動態(tài)存儲兩種情況。靜態(tài)存 儲是指變量存儲在內(nèi)存的靜態(tài)存儲區(qū),在編譯時就分配了存儲空間,在整個程序的運(yùn)行期間,該變量占有 固定的存儲單元,程序結(jié)束后,這部分空間才釋放,變量的值在整個程序中始終存在;動態(tài)存儲是指變量 存儲在內(nèi)存的動態(tài)存儲區(qū),在程序的運(yùn)行過程中,只有當(dāng)變量所在的函數(shù)被調(diào)用時,編譯系統(tǒng)才臨時為該 變量分配一段內(nèi)存單元,函數(shù)調(diào)用結(jié)束,該變量空間釋放,變量的值只在函數(shù)調(diào)用期存在。
變量的作用范圍又稱為作用域,從空間角度,可以將變量分為全局變量和局部變量。局部變量是在一 個函數(shù)或復(fù)合語句內(nèi)定義的變量,它僅在函數(shù)或復(fù)合語句內(nèi)有效,編譯時,編譯系統(tǒng)不為局部變量分配內(nèi) 存單元,而是在程序運(yùn)行過程中,當(dāng)局部變量所在的函數(shù)被調(diào)用時,編譯系統(tǒng)根據(jù)需要,臨時分配內(nèi)存, 調(diào)用結(jié)束,空間釋放;全局變量是在函數(shù)之外定義的變量,其作用范圍為從定義處開始到本文件結(jié)束,編 譯時,編譯系統(tǒng)為其分配固定的內(nèi)存單元,在程序運(yùn)行的自始至終都占用固定單元。
1. 自動變量
函數(shù)中的局部變量,如不專門聲明為 static 存儲類別,都是動態(tài)地分配存儲空間的,數(shù)據(jù)存儲在動態(tài) 存儲區(qū)中。函數(shù)中的形參和在函數(shù)中定義的變量(包括在復(fù)合語句中定義的變量)都屬此類,在調(diào)用該函 數(shù)時系統(tǒng)會給它們分配存儲空間,在函數(shù)調(diào)用結(jié)束時就自動釋放這些存儲空間。這類局部變量稱為自動變 量。自動變量用關(guān)鍵字 auto 進(jìn)行存儲類別的聲明,例如聲明一個自動變量:
int fun(int a)
{
auto int b,c=3; /*定義 b,c 為自動變量*/
}
a 是函數(shù) fun()的形參,b、c 是自動變量,并對 c 賦初值 3。執(zhí)行完 fun()函數(shù)后,自動釋放 a、b、c 所占的存儲單元。
2. 外部變量
外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件末尾。如果在定義點之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字 extern 對該變量進(jìn)行“外部變量聲明”。表示該 變量是一個已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量.
用 extern 聲明外部變量,擴(kuò)展程序文件中的作用域
3. 靜態(tài)變量
有時希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,這時就應(yīng)該指定局部變量為靜 態(tài)局部變量,用關(guān)鍵字 static 進(jìn)行聲明。
4. 寄存器變量
為提高效率,C 語言允許將局部變量的值存放在 CPU 的寄存器中,這種變量叫做寄存器變量,用關(guān)鍵字 register 聲明。使用寄存器變量需要注意以下幾點:
(1)只有局部自動變量和形式參數(shù)可以作為寄存器變量。
(2)一個計算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個寄存器變量。
(3)不能使用取地址運(yùn)算符“&”求寄存器變量的地址。
【如何快速掌握C語言函數(shù)】相關(guān)文章:
Java程序如何調(diào)用C/C++語言函數(shù)10-29
C語言中如何定義函數(shù)式宏10-24
如何實現(xiàn)C語言多個函數(shù)值的返回09-16
如何運(yùn)用C語言malloc和free函數(shù)08-25
什么是C語言函數(shù)09-26
C語言的數(shù)組與函數(shù)10-23
C語言函數(shù)的含義06-15
C語言函數(shù) atoi()09-04
淺談C語言函數(shù)11-07