首頁考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點(diǎn)日語
職稱英語
口譯筆譯
申碩英語
零起點(diǎn)韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點(diǎn)英語
托福考試
托業(yè)考試
零起點(diǎn)法語
雅思考試
成人英語三級
零起點(diǎn)德語
等級考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會計(jì)職稱
法律顧問
ACCA考試
注冊會計(jì)師
資產(chǎn)評估師
審計(jì)師考試
高級會計(jì)師
注冊稅務(wù)師
國際內(nèi)審師
理財(cái)規(guī)劃師
美國注冊會計(jì)師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
計(jì)算機(jī)等級考試

2013年計(jì)算機(jī)等考二級C++考點(diǎn)歸納:函數(shù)考點(diǎn)歸納

  第5章 函數(shù)

  5.1 函數(shù)定義

  在標(biāo)準(zhǔn)C+ +中,函數(shù)的定義形式為:

  <返回類型><函數(shù)名>(<形參列表>)

  {

  <函數(shù)體>

  }

  <函數(shù)名>一般是標(biāo)識符,一個(gè)程序只有一個(gè)main函數(shù),其他函數(shù)名可隨意取(當(dāng)然,必須避免使用C+ +的關(guān)鍵字),好的程序設(shè)計(jì)風(fēng)格要求函數(shù)名最好是取有助于記憶的名字,如getchar函數(shù),通過函數(shù)的名字可以知道函數(shù)的功能,這無疑會增加程序的可讀性。

  <形參列表>是由逗號分隔的,分別說明函數(shù)的各個(gè)參數(shù)。形參將在函數(shù)被調(diào)用時(shí)從調(diào)用函數(shù)那里獲得數(shù)據(jù)。在C+ +中,函數(shù)形參列表可以為空,即一個(gè)函數(shù)可以沒有參數(shù)。但即使函數(shù)形參列表為空,括起函數(shù)參數(shù)的一對圓括號也不允許省略。

  <返回類型>又稱函數(shù)類型,表示一個(gè)函數(shù)所計(jì)算(或運(yùn)行)的結(jié)果值的類型。如果一個(gè)函數(shù)沒有結(jié)果值,如函數(shù)僅用來更新(或設(shè)置)變量值、顯示信息等,則該函數(shù)返回類型為void類型。一個(gè)沒有返回值的函數(shù)類似于一些程序語言(如pascal語言)中的過程(procedure)。

  由一對花括號括起來的<函數(shù)體>是語句的序列,它定義了函數(shù)應(yīng)執(zhí)行的具體操作。

  需要注意的是,C+ +不允許函數(shù)定義嵌套,即在一個(gè)函數(shù)體內(nèi)不能包含有其他函數(shù)的定義。

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

  C+ +中函數(shù)調(diào)用的一般形式為:

  <函數(shù)名>(<實(shí)參表>)

  當(dāng)調(diào)用一個(gè)函數(shù)時(shí),其實(shí)參的個(gè)數(shù)、類型及排列次序必須與函數(shù)定義時(shí)的形參相一致,也就是說實(shí)參與形參應(yīng)該一對一地匹配。當(dāng)函數(shù)定義時(shí)沒有形參,則函數(shù)調(diào)用時(shí),<實(shí)參表>亦為空。

  依據(jù)對函數(shù)返回值的使用方式,函數(shù)的調(diào)用方法可分為以下幾種:

  (1)語句調(diào)用,這通常用于不帶返回值的函數(shù)。這種情況下,被調(diào)用函數(shù)作為一個(gè)獨(dú)立的語句出現(xiàn)在程序中。

  (2)表達(dá)式調(diào)用。將被調(diào)用函數(shù)作為表達(dá)式的一部分來進(jìn)行調(diào)用。它適用于被調(diào)用函數(shù)帶有返回值的情況。

  (3)參數(shù)調(diào)用。被調(diào)用函數(shù)作為另一個(gè)函數(shù)的一個(gè)參數(shù)進(jìn)行調(diào)用。

  5.3 函數(shù)原型

  在C+ +中,函數(shù)在使用之前要預(yù)先聲明。這種聲明在標(biāo)準(zhǔn)C+ +中稱為函數(shù)原型(function prototype),函數(shù)原型給出了函數(shù)名、返回類型以及在調(diào)用函數(shù)時(shí)必須提供的參數(shù)的個(gè)數(shù)和類型。函數(shù)原型的語法為:

  <返回類型><函數(shù)名>(<形參列表>);

  (注意在函數(shù)原型后要有分號)

  實(shí)際上函數(shù)原型說明有兩種形式:

  (1)直接使用函數(shù)定義的頭部,并在后面加上一個(gè)分號。

  (2)在函數(shù)原型說明中省略參數(shù)列表中的形參變量名,僅給出函數(shù)名、函數(shù)類型、參數(shù)個(gè)數(shù)及次序。

  注意:在C+ +中,在調(diào)用任何函數(shù)之前,必須確保它已有原型說明。函數(shù)原型說明通常放在程序文件的頭部,以使得該文件中所有函數(shù)都能調(diào)用它們。實(shí)際上,標(biāo)準(zhǔn)函數(shù)的原型說明放在了相應(yīng)的頭文件中,這也是為什么在調(diào)用標(biāo)準(zhǔn)函數(shù)時(shí)必須要包含相應(yīng)的頭文件的原因之一。

  在了解了函數(shù)定義、函數(shù)調(diào)用和函數(shù)原型之后,就可以寫出一個(gè)完整的C+ +程序,并可將其編譯和運(yùn)行。

  5.4 函數(shù)返回類型

  根據(jù)函數(shù)是否帶有參數(shù)以及函數(shù)是否有返回值,可以將函數(shù)分為如下四類。

  1帶參數(shù)的有返回值函數(shù)

  定義形式為:

  <返回類型><函數(shù)名>(<參數(shù)列表>)

  {

  <語句序列>

 。

  2不帶參數(shù)的有返回值函數(shù)

  定義形式為:

  <返回類型><函數(shù)名>()

  {

  <語句序列>

  }

  3帶參數(shù)的無返回值函數(shù)

  定義形式為:

  void<函數(shù)名>(<參數(shù)列表>)

  {

  <語句序列>

 。

  4不帶參數(shù)的無返回值函數(shù)

  定義形式為:

  void<函數(shù)名>()

  {

  <語句序列>

 。

  5.5 函數(shù)參數(shù)

  C+ +中,函數(shù)之間傳遞參數(shù)有傳值和傳地址兩種傳遞方式。此外,C+ +還提供了默認(rèn)參數(shù)機(jī)制,可以簡化復(fù)雜函數(shù)的調(diào)用。

  1參數(shù)的傳遞方式

  (1)傳值

  傳值是將實(shí)參值的副本傳遞(拷貝)給被調(diào)用函數(shù)的形參。它是C+ +的默認(rèn)參數(shù)傳遞方式,在此之前的多數(shù)函數(shù)參數(shù)傳遞都是傳值。

  由于傳值方式是將實(shí)參的值復(fù)制到形參中,因此實(shí)參和形參是兩個(gè)不同的變量,有各自的存儲空間,可以把函數(shù)形參看作是函數(shù)的局部變量。傳值的最大好處是函數(shù)調(diào)用不會改變調(diào)用函數(shù)實(shí)參變量的內(nèi)容,可避免不必要的副作用。

  (2)傳地址

  有時(shí)我們確實(shí)需要通過函數(shù)調(diào)用來改變實(shí)參變量的值,或通過函數(shù)調(diào)用返回多個(gè)值(return語句只能返回一個(gè)值),這時(shí)僅靠傳值方式是不能達(dá)到目的。

  2默認(rèn)參數(shù)

  在C+ +中,可以為參數(shù)指定默認(rèn)值,在函數(shù)調(diào)用時(shí)沒有指定與形參相對應(yīng)的實(shí)參時(shí)就自動使用默認(rèn)值。默認(rèn)參數(shù)可以簡化復(fù)雜函數(shù)的調(diào)用。

  默認(rèn)參數(shù)通常在函數(shù)名第一次出現(xiàn)在程序中的時(shí)候,如在函數(shù)原型中,指定默認(rèn)參數(shù)值。指定默認(rèn)參數(shù)的方式從語法上看與變量初始化相似。

  5.6 函數(shù)重載

  如果能用同一個(gè)函數(shù)名字在不同類型上做相類似的操作就會方便很多,這種情況即為函數(shù)重載。其實(shí)這一技術(shù)早已用于C+ +的基本運(yùn)算符。例如加法操作只有一個(gè)運(yùn)算符+,但它卻可以用來做整型數(shù)、浮點(diǎn)數(shù)和指針的加法運(yùn)算。將這一思想推廣到函數(shù),即為函數(shù)重載。

  5.7 內(nèi)聯(lián)函數(shù)

  C+ +引入內(nèi)聯(lián)(inline)函數(shù)的原因是用它來取代C中的預(yù)處理宏函數(shù)。內(nèi)聯(lián)函數(shù)和宏函數(shù)的區(qū)別在于,宏函數(shù)是由預(yù)處理器對宏進(jìn)行替換,而內(nèi)聯(lián)函數(shù)是通過編譯器來實(shí)現(xiàn)的,因此內(nèi)聯(lián)函數(shù)是真正的函數(shù),只是在調(diào)用的時(shí)候,內(nèi)聯(lián)函數(shù)像宏函數(shù)一樣的展開,所以它沒有一般函數(shù)的參數(shù)壓棧和退棧操作,減少了調(diào)用開銷,因此,內(nèi)聯(lián)函數(shù)比普通函數(shù)有更高的執(zhí)行效率。

  在C+ +中使用inline關(guān)鍵字來定義內(nèi)聯(lián)函數(shù)。inline關(guān)鍵字放在函數(shù)定義中函數(shù)類型之前。不過,編譯器會將在類的說明部分定義的任何函數(shù)都認(rèn)定為內(nèi)聯(lián)函數(shù),即使它們沒有用inline說明。

  5.8 遞歸函數(shù)

  如果一個(gè)函數(shù)在其函數(shù)體內(nèi)直接或間接地調(diào)用了自己,該函數(shù)就稱為遞歸函數(shù)。遞歸是解決某些復(fù)雜問題的十分有效的方法。遞歸適用以下的一般場合。

  (1)數(shù)據(jù)的定義形式按遞歸定義。

  (2)數(shù)據(jù)之間的關(guān)系(即數(shù)據(jù)結(jié)構(gòu))按遞歸定義,如樹的遍歷,圖的搜索等。

  (3)問題解法按遞歸算法實(shí)現(xiàn),例如回溯法等。

  使用遞歸需要注意以下幾點(diǎn):

  (1)用遞歸編寫代碼往往較為簡潔,但要犧牲一定的效率。因?yàn)橄到y(tǒng)處理遞歸函數(shù)時(shí)都是通過壓棧/退棧的方式實(shí)現(xiàn)的。

  (2)無論哪種遞歸調(diào)用,都必須有遞歸出口,即結(jié)束遞歸調(diào)用的條件。

  (3)編寫遞歸函數(shù)時(shí)需要進(jìn)行遞歸分析,既要保證正確使用了遞歸語句,還要保證完成了相應(yīng)的操作。

  5.9 變量作用域與生存周期

  1C+ +中變量的存儲類型分為如下幾種類型:

  auto——函數(shù)內(nèi)部的局部變量(auto可省略不寫)。

  static——靜態(tài)存儲分配,又分為內(nèi)部和外部靜態(tài)。

  extern——全局變量(用于外部變量說明)。

  register——變量存儲在硬件寄存器中。

  (1)自動變量

 、僭诤瘮(shù)內(nèi)部定義的局部變量即為自動變量,用于說明自動變量的關(guān)鍵字auto可以省略。

  ②在函數(shù)頭部定義的自動變量作用域?yàn)槎x它的函數(shù);而在塊語句中定義的自動變量作用域?yàn)樗趬K。與C不同,C+ +還允許在變量使用之前才定義變量。

  ③編譯程序不給自動變量賦予隱含的初值,故其初值不確定。因此,每次使用自動變量前,必須明確地賦初值。

 、苄螀⒖梢钥闯墒呛瘮(shù)的自動變量,作用域僅限于相應(yīng)函數(shù)內(nèi)。

 、葑詣幼兞克褂玫拇鎯臻g由程序自動地創(chuàng)建和釋放。當(dāng)函數(shù)調(diào)用時(shí)為自動變量創(chuàng)建存儲空間,函數(shù)調(diào)用結(jié)束時(shí)將自動釋放為其創(chuàng)建的存儲空間。因此,自動變量隨函數(shù)的調(diào)用而存在并隨函數(shù)調(diào)用結(jié)束而消失,由一次調(diào)用到下一次調(diào)用之間不保存值。

  (2)外部變量

  ①在函數(shù)外部定義的變量即為外部變量。

  ②外部變量的作用域是整個(gè)程序(全局變量)。

  ③在C+ +中,程序可以分別放在幾個(gè)源文件上,每個(gè)文件可作為一個(gè)編譯單位分別編譯。外部變量只需在某個(gè)文件上定義一次,其他文件若要引用此變量時(shí),應(yīng)用extern加以說明。(外部變量定義時(shí)不必加extern關(guān)鍵字)。

 、茉谕晃募校羟懊娴暮瘮(shù)要引用在其后面定義的外部(在函數(shù)之外)變量時(shí),也應(yīng)用extern加以說明。

 、萃獠孔兞渴怯删幾g程序在編譯時(shí)給其分配空間,屬于靜態(tài)分配變量,對于數(shù)值型(整型、浮點(diǎn)型和字符型)外部變量來說,其有隱含初值0。

  引進(jìn)外部變量的原因:其一是只要程序運(yùn)行外部變量的值是始終存在的;其二是外部變量可以在所有函數(shù)間共享。

  在C+ +中,可以使用外部變量,但是,必須要清楚使用外部變量的副作用。使用外部變量的函數(shù)獨(dú)立性差,通常不能被移植到其他程序中,而且,如果多個(gè)函數(shù)都使用到某個(gè)外部變量,一旦出現(xiàn)問題,就很難發(fā)現(xiàn)問題是由哪個(gè)函數(shù)引起的。在C+ +中,盡量不用或少用外部變量,可使用參數(shù)在函數(shù)間進(jìn)行數(shù)據(jù)的傳遞。

  (3)靜態(tài)變量

  內(nèi)部靜態(tài)變量:

 、僭诰植孔兞壳凹由稀皊tatic”關(guān)鍵字就成為內(nèi)部靜態(tài)變量。

 、趦(nèi)部靜態(tài)變量仍是局部變量,其作用域仍在定義它的函數(shù)內(nèi)。但該類型變量采用靜態(tài)存儲分配,當(dāng)函數(shù)執(zhí)行完,返回調(diào)用點(diǎn)時(shí),該變量并不撤消,其值將繼續(xù)保留,若下次再進(jìn)入該函數(shù)時(shí),其值仍然存在。內(nèi)部靜態(tài)變量有隱含初值0,并且只在編譯時(shí)初始化一次。

  外部靜態(tài)變量:

 、僭诤瘮(shù)外部定義的變量前加上“static”關(guān)鍵字便成了外部靜態(tài)變量。

  ②外部靜態(tài)變量的作用域?yàn)槎x它的文件,即成為該文件的“私有”(private)變量,只有其所在文件上的函數(shù)可以訪問該外部靜態(tài)變量,而其他文件上的函數(shù)一律不得直接訪問該變量,除非通過外部靜態(tài)變量所在文件上的各種函數(shù)來對它進(jìn)行操作,這也是一種實(shí)現(xiàn)數(shù)據(jù)隱藏的方式。

 、叟c內(nèi)部靜態(tài)變量一樣,外部靜態(tài)變量也采用靜態(tài)存儲分配,有隱含初值0。

  在C+ +中,除了支持C風(fēng)格的內(nèi)部和外部靜態(tài)變量的使用之外,還可將類成員聲明成static,它有著不同的含義。

  (4)寄存器變量

 、僦挥凶詣(局部)變量和函數(shù)參數(shù)可指定為寄存器存儲類,它的作用域與生存期與自動變量完全相同。

  ②當(dāng)指定的寄存器變量個(gè)數(shù)超過系統(tǒng)所能提供的寄存器數(shù)量時(shí),多出的寄存器變量將視同自動變量。

 、壑幌抻趇nt,char,short,unsigned和指針類型可使用register存儲類。

 、懿荒軐拇嫫髯兞咳〉刂(即&操作)。

 、菔褂眉拇嫫髯兞靠梢蕴岣叽嫒∷俣龋蓪⑹褂妙l率最高的變量說明成為寄存器變量。一般常用于說明循環(huán)變量。

  由于硬件的快速發(fā)展,存儲器(如內(nèi)存)的性能有了很大的改進(jìn),因此,目前在實(shí)際應(yīng)用中,使用register來說明變量的情況并不多。

  2生存周期

  (1)變量由編譯程序在編譯時(shí)給其分配存儲空間(稱為靜態(tài)存儲分配),并在程序執(zhí)行過程中始終存在,這類變量包括全局變量、外部靜態(tài)變量和內(nèi)部靜態(tài)變量。這類變量的生存周期與程序的運(yùn)行周期相同,當(dāng)程序運(yùn)行時(shí),該變量的生存周期隨即存在,程序運(yùn)行結(jié)束,變量的生存周期隨即終止。

  (2)變量由程序在運(yùn)行時(shí)自動給其分配存儲空間(稱為自動存儲分配),這類變量為函數(shù)(或塊)中定義的自動變量。它們在程序執(zhí)行到該函數(shù)(或塊)時(shí)被創(chuàng)建,在函數(shù)(或塊)執(zhí)行結(jié)束時(shí)釋放所用的空間。

1 2  下一頁
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級考試網(wǎng)內(nèi)容,請注明出處。