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

2013年計算機等考二級C++考點歸納:函數(shù)考點歸納

  第5章 函數(shù)

  5.1 函數(shù)定義

  在標準C+ +中,函數(shù)的定義形式為:

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

  {

  <函數(shù)體>

  }

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

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

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

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

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

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

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

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

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

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

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

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

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

  5.3 函數(shù)原型

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

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

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

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

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

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

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

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

  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+ +還提供了默認參數(shù)機制,可以簡化復(fù)雜函數(shù)的調(diào)用。

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

  (1)傳值

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

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

  (2)傳地址

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

  2默認參數(shù)

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

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

  5.6 函數(shù)重載

  如果能用同一個函數(shù)名字在不同類型上做相類似的操作就會方便很多,這種情況即為函數(shù)重載。其實這一技術(shù)早已用于C+ +的基本運算符。例如加法操作只有一個運算符+,但它卻可以用來做整型數(shù)、浮點數(shù)和指針的加法運算。將這一思想推廣到函數(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ù)處理器對宏進行替換,而內(nèi)聯(lián)函數(shù)是通過編譯器來實現(xiàn)的,因此內(nèi)聯(lián)函數(shù)是真正的函數(shù),只是在調(diào)用的時候,內(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ù)都認定為內(nèi)聯(lián)函數(shù),即使它們沒有用inline說明。

  5.8 遞歸函數(shù)

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

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

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

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

  使用遞歸需要注意以下幾點:

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

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

  (3)編寫遞歸函數(shù)時需要進行遞歸分析,既要保證正確使用了遞歸語句,還要保證完成了相應(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ù)頭部定義的自動變量作用域為定義它的函數(shù);而在塊語句中定義的自動變量作用域為所在塊。與C不同,C+ +還允許在變量使用之前才定義變量。

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

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

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

  (2)外部變量

 、僭诤瘮(shù)外部定義的變量即為外部變量。

 、谕獠孔兞康淖饔糜蚴钦麄程序(全局變量)。

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

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

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

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

  在C+ +中,可以使用外部變量,但是,必須要清楚使用外部變量的副作用。使用外部變量的函數(shù)獨立性差,通常不能被移植到其他程序中,而且,如果多個函數(shù)都使用到某個外部變量,一旦出現(xiàn)問題,就很難發(fā)現(xiàn)問題是由哪個函數(shù)引起的。在C+ +中,盡量不用或少用外部變量,可使用參數(shù)在函數(shù)間進行數(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)存儲分配,當函數(shù)執(zhí)行完,返回調(diào)用點時,該變量并不撤消,其值將繼續(xù)保留,若下次再進入該函數(shù)時,其值仍然存在。內(nèi)部靜態(tài)變量有隱含初值0,并且只在編譯時初始化一次。

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

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

 、谕獠快o態(tài)變量的作用域為定義它的文件,即成為該文件的“私有”(private)變量,只有其所在文件上的函數(shù)可以訪問該外部靜態(tài)變量,而其他文件上的函數(shù)一律不得直接訪問該變量,除非通過外部靜態(tài)變量所在文件上的各種函數(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ù)可指定為寄存器存儲類,它的作用域與生存期與自動變量完全相同。

 、诋斨付ǖ募拇嫫髯兞總數(shù)超過系統(tǒng)所能提供的寄存器數(shù)量時,多出的寄存器變量將視同自動變量。

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

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

 、菔褂眉拇嫫髯兞靠梢蕴岣叽嫒∷俣,可將使用頻率最高的變量說明成為寄存器變量。一般常用于說明循環(huán)變量。

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

  2生存周期

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

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

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