版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。每個 C+ 程序都至少有一個函數(shù),即主函數(shù) main() ,所有簡單的程序都可以定義其他額外的函數(shù)。您可以把代碼劃分到不同的函數(shù)中。如何劃分代碼到不同的函數(shù)中是由您來決定的,但在邏輯上,劃分通常是根據(jù)每個函數(shù)執(zhí)行一個特定的任務(wù)來進(jìn)行的。函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)。函數(shù)定義提供了函數(shù)的實際主體。C+ 標(biāo)準(zhǔn)庫提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù) strcat() 用來連接兩個字符串,函數(shù) memcpy() 用來復(fù)制內(nèi)存到另一個位置。函數(shù)還有很多叫法,比如方法、子例程或程序,等等
2、。定義函數(shù)C+ 中的函數(shù)定義的一般形式如下:return_type function_name( parameter list ) body of the function 在 C+ 中,函數(shù)由一個函數(shù)頭和一個函數(shù)主體組成。下面列出一個函數(shù)的所有組成部分:· 返回類型:一個函數(shù)可以返回一個值。return_type 是函數(shù)返回的值的數(shù)據(jù)類型。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,return_type 是關(guān)鍵字 void。· 函數(shù)名稱:這是函數(shù)的實際名稱。函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。· 參數(shù):參數(shù)就像是占位符。當(dāng)函數(shù)被調(diào)用時,
3、您向參數(shù)傳遞一個值,這個值被稱為實際參數(shù)。參數(shù)列表包括函數(shù)參數(shù)的類型、順序、數(shù)量。參數(shù)是可選的,也就是說,函數(shù)可能不包含參數(shù)。· 函數(shù)主體:函數(shù)主體包含一組定義函數(shù)執(zhí)行任務(wù)的語句。實例以下是 max() 函數(shù)的源代碼。該函數(shù)有兩個參數(shù) num1 和 num2,會返回這兩個數(shù)中較大的那個數(shù):/ 函數(shù)返回兩個數(shù)中較大的那個數(shù) int max(int num1, int num2) / 局部變量聲明 int result; if (num1 > num2) result = num1; else result = num2; return result; 函數(shù)聲明
4、函數(shù)聲明會告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)。函數(shù)的實際主體可以單獨定義。函數(shù)聲明包括以下幾個部分:return_type function_name( parameter list );針對上面定義的函數(shù) max(),以下是函數(shù)聲明:int max(int num1, int num2);在函數(shù)聲明中,參數(shù)的名稱并不重要,只有參數(shù)的類型是必需的,因此下面也是有效的聲明:int max(int, int);當(dāng)您在一個源文件中定義函數(shù)且在另一個文件中調(diào)用函數(shù)時,函數(shù)聲明是必需的。在這種情況下,您應(yīng)該在調(diào)用函數(shù)的文件頂部聲明函數(shù)。調(diào)用函數(shù)創(chuàng)建 C+ 函數(shù)時,會定義函數(shù)做什么,然后通過調(diào)用函數(shù)來完成已
5、定義的任務(wù)。當(dāng)程序調(diào)用函數(shù)時,程序控制權(quán)會轉(zhuǎn)移給被調(diào)用的函數(shù)。被調(diào)用的函數(shù)執(zhí)行已定義的任務(wù),當(dāng)函數(shù)的返回語句被執(zhí)行時,或到達(dá)函數(shù)的結(jié)束括號時,會把程序控制權(quán)交還給主程序。調(diào)用函數(shù)時,傳遞所需參數(shù),如果函數(shù)返回一個值,則可以存儲返回值。例如:實例#include <iostream> using namespace std; / 函數(shù)聲明 int max(int num1, int num2); int main () / 局部變量聲明 int a = 100; int b = 200; int ret; / 調(diào)用函數(shù)來獲取最大值 ret = max(a, b); cout <
6、< "Max value is : " << ret << endl; return 0; / 函數(shù)返回兩個數(shù)中較大的那個數(shù) int max(int num1, int num2) / 局部變量聲明 int result; if (num1 > num2) result = num1; else result = num2; return result; 把 max() 函數(shù)和 main() 函數(shù)放一塊,編譯源代碼。當(dāng)運(yùn)行最后的可執(zhí)行文件時,會產(chǎn)生下列結(jié)果:Max value is : 200函數(shù)參數(shù)如果函數(shù)要使用參數(shù),則必須聲明接受參數(shù)
7、值的變量。這些變量稱為函數(shù)的形式參數(shù)。形式參數(shù)就像函數(shù)內(nèi)的其他局部變量,在進(jìn)入函數(shù)時被創(chuàng)建,退出函數(shù)時被銷毀。當(dāng)調(diào)用函數(shù)時,有兩種向函數(shù)傳遞參數(shù)的方式:調(diào)用類型描述傳值調(diào)用該方法把參數(shù)的實際值復(fù)制給函數(shù)的形式參數(shù)。在這種情況下,修改函數(shù)內(nèi)的形式參數(shù)對實際參數(shù)沒有影響。指針調(diào)用該方法把參數(shù)的地址復(fù)制給形式參數(shù)。在函數(shù)內(nèi),該地址用于訪問調(diào)用中要用到的實際參數(shù)。這意味著,修改形式參數(shù)會影響實際參數(shù)。引用調(diào)用該方法把參數(shù)的引用復(fù)制給形式參數(shù)。在函數(shù)內(nèi),該引用用于訪問調(diào)用中要用到的實際參數(shù)。這意味著,修改形式參數(shù)會影響實際參數(shù)。默認(rèn)情況下,C+ 使用傳值調(diào)用來傳遞參數(shù)。一般來說,這意味著函數(shù)內(nèi)的代碼不能
8、改變用于調(diào)用函數(shù)的參數(shù)。之前提到的實例,調(diào)用 max() 函數(shù)時,使用了相同的方法。參數(shù)的默認(rèn)值當(dāng)您定義一個函數(shù),您可以為參數(shù)列表中后邊的每一個參數(shù)指定默認(rèn)值。當(dāng)調(diào)用函數(shù)時,如果實際參數(shù)的值留空,則使用這個默認(rèn)值。這是通過在函數(shù)定義中使用賦值運(yùn)算符來為參數(shù)賦值的。調(diào)用函數(shù)時,如果未傳遞參數(shù)的值,則會使用默認(rèn)值,如果指定了值,則會忽略默認(rèn)值,使用傳遞的值。請看下面的實例:實例#include <iostream> using namespace std; int sum(int a, int b=20) int result; result = a + b; return (resu
9、lt); int main () / 局部變量聲明 int a = 100; int b = 200; int result; / 調(diào)用函數(shù)來添加值 result = sum(a, b); cout << "Total value is :" << result << endl; / 再次調(diào)用函數(shù) result = sum(a); cout << "Total value is :" << result << endl; return 0; 當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)
10、果:Total value is :300Total value is :120Lambda 函數(shù)與表達(dá)式C+11 提供了對匿名函數(shù)的支持,稱為 Lambda 函數(shù)(也叫 Lambda 表達(dá)式)。Lambda 表達(dá)式把函數(shù)看作對象。Lambda 表達(dá)式可以像對象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對其求值。Lambda 表達(dá)式本質(zhì)上與函數(shù)聲明非常類似。Lambda 表達(dá)式具體形式如下:capture(parameters)->return-typebody例如:(int x, int y) return x < y ; 如果沒有返回值可以表示為:capt
11、ure(parameters)body例如: +global_x; 在一個更為復(fù)雜的例子中,返回類型可以被明確的指定如下:(int x, int y) -> int int z = x + y; return z + x; 本例中,一個臨時的參數(shù) z 被創(chuàng)建用來存儲中間結(jié)果。如同一般的函數(shù),z 的值不會保留到下一次該不具名函數(shù)再次被調(diào)用時。如果 lambda 函數(shù)沒有傳回值(例如 void),其返回類型可被完全忽略。在Lambda表達(dá)式內(nèi)可以訪問當(dāng)前作用域的變量,這是Lambda表達(dá)式的閉包(Closure)行為。 與JavaScript閉包不同,C+變量傳遞有傳值和傳引用的區(qū)別??梢酝?/p>
12、過前面的來指定: / 沒有定義任何變量。使用未定義變量會引發(fā)錯誤。x, &y / x以傳值方式傳入(默認(rèn)),y以引用方式傳入。& / 任何被使用到的外部變量都隱式地以引用方式加以引用。= / 任何被使用到的外部變量都隱式地以傳值方式加以引用。&, x / x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。=, &z / z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。另外有一點需要注意。對于=或&的形式,lambda 表達(dá)式可以直接使用 this 指針。但是,對于的形式,如果要使用 this 指針,必須顯式傳入:C+ 數(shù)組C+ 支
13、持?jǐn)?shù)組數(shù)據(jù)結(jié)構(gòu),它可以存儲一個固定大小的相同類型元素的順序集合。數(shù)組是用來存儲一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量。數(shù)組的聲明并不是聲明一個個單獨的變量,比如 number0、number1、.、number99,而是聲明一個數(shù)組變量,比如 numbers,然后使用 numbers0、numbers1、.、numbers99 來代表一個個單獨的變量。數(shù)組中的特定元素可以通過索引訪問。所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成。最低的地址對應(yīng)第一個元素,最高的地址對應(yīng)最后一個元素。聲明數(shù)組在 C+ 中要聲明一個數(shù)組,需要指定元素的類型和元素的數(shù)量,如下所示:type arrayName ar
14、raySize ;這叫做一維數(shù)組。arraySize 必須是一個大于零的整數(shù)常量,type 可以是任意有效的 C+ 數(shù)據(jù)類型。例如,要聲明一個類型為 double 的包含 10 個元素的數(shù)組 balance,聲明語句如下:double balance10;現(xiàn)在 balance 是一個可用的數(shù)組,可以容納 10 個類型為 double 的數(shù)字。初始化數(shù)組在 C+ 中,您可以逐個初始化數(shù)組,也可以使用一個初始化語句,如下所示:double balance5 = 1000.0, 2.0, 3.4, 7.0, 50.0;大括號 之間的值的數(shù)目不能大于我
15、們在數(shù)組聲明時在方括號 中指定的元素數(shù)目。如果您省略掉了數(shù)組的大小,數(shù)組的大小則為初始化時元素的個數(shù)。因此,如果:double balance = 1000.0, 2.0, 3.4, 7.0, 50.0;您將創(chuàng)建一個數(shù)組,它與前一個實例中所創(chuàng)建的數(shù)組是完全相同的。下面是一個為數(shù)組中某個元素賦值的實例:balance4 = 50.0;上述的語句把數(shù)組中第五個元素的值賦為 50.0。所有的數(shù)組都是以 0 作為它們第一個元素的索引,也被稱為基索引,數(shù)組的最后一個索引是數(shù)組的總大小減去 1。以下是上面所討論的數(shù)組的的圖形表示:訪問數(shù)組元素數(shù)組元素可以通過數(shù)組名稱加索引進(jìn)行訪問。元素的索引是放在方括號內(nèi)
16、,跟在數(shù)組名稱的后邊。例如:double salary = balance9;上面的語句將把數(shù)組中第 10 個元素的值賦給 salary 變量。下面的實例使用了上述的三個概念,即,聲明數(shù)組、數(shù)組賦值、訪問數(shù)組:實例#include <iostream> using namespace std; #include <iomanip> using std:setw; int main () int n 10 ; / n 是一個包含 10 個整數(shù)的數(shù)組 / 初始化數(shù)組元素 for ( int i = 0; i < 10; i+ ) n i = i + 100; / 設(shè)置
17、元素 i 為 i + 100 cout << "Element" << setw( 13 ) << "Value" << endl; / 輸出數(shù)組中每個元素的值 for ( int j = 0; j < 10; j+ ) cout << setw( 7 )<< j << setw( 13 ) << n j << endl; return 0; 上面的程序使用了 setw() 函數(shù)來格式化輸出。當(dāng)上面的代碼被編譯和執(zhí)行時,它
18、會產(chǎn)生下列結(jié)果:Element Value 0 100 1 101 2 102 3 103 4 104 5 105 6 106 7 107 8 108 9 109C+ 中數(shù)組詳解在 C+ 中,數(shù)組是非常重要的,我們需要了解更多有關(guān)數(shù)組的細(xì)節(jié)。下面列出了 C+ 程序員必須清楚的一些與數(shù)組相關(guān)的重要概念:概念描述多維數(shù)組C+ 支持多維數(shù)組。多維數(shù)組最簡單的形式是二維數(shù)組。指向數(shù)組的指針您可以通過指定不帶索引的數(shù)組名稱來生成一個指向數(shù)組中第一個元素的指針。傳遞數(shù)組給函數(shù)您可以通過指定不帶索引的數(shù)組名稱來給函數(shù)傳遞一個指向數(shù)組的指針。從函數(shù)返回數(shù)組C+ 允許從函數(shù)返回數(shù)組。C+ 字符串C+
19、提供了以下兩種類型的字符串表示形式:· C 風(fēng)格字符串· C+ 引入的 string 類類型C 風(fēng)格字符串C 風(fēng)格的字符串起源于 C 語言,并在 C+ 中繼續(xù)得到支持。字符串實際上是使用 null 字符 '0' 終止的一維字符數(shù)組。因此,一個以 null 結(jié)尾的字符串,包含了組成字符串的字符。下面的聲明和初始化創(chuàng)建了一個 "Hello" 字符串。由于在數(shù)組的末尾存儲了空字符,所以字符數(shù)組的大小比單詞 "Hello" 的字符數(shù)多一個。char greeting6 = 'H&
20、#39;, 'e', 'l', 'l', 'o', '0'依據(jù)數(shù)組初始化規(guī)則,您可以把上面的語句寫成以下語句:char greeting = "Hello"以下是 C/C+ 中定義的字符串的內(nèi)存表示:其實,您不需要把 null 字符放在字符串常量的末尾。C+ 編譯器會在初始化數(shù)組時,自動把 '0' 放在字符串的末尾。讓我們嘗試輸出上面的字符串:實例#include <iostream> using namespace std; int main (
21、) char greeting6 = 'H', 'e', 'l', 'l', 'o', '0' cout << "Greeting message: " cout << greeting << endl; return 0; 當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:Greeting message: HelloC+ 中有大量的函數(shù)用來操作以 null 結(jié)尾的字符串:supports a wide range of functions th
22、at manipulate null-terminated strings:序號函數(shù) & 目的1strcpy(s1, s2);復(fù)制字符串 s2 到字符串 s1。2strcat(s1, s2);連接字符串 s2 到字符串 s1 的末尾。3strlen(s1);返回字符串 s1 的長度。4strcmp(s1, s2);如果 s1 和 s2 是相同的,則返回 0;如果 s1<s2 則返回值小于 0;如果 s1>s2 則返回值大于 0。5strchr(s1, ch);返回一個指針,指向字符串 s1 中字符 ch 的第一次出現(xiàn)的位置。6strstr(s1, s2);返回一個指針,指向
23、字符串 s1 中字符串 s2 的第一次出現(xiàn)的位置。下面的實例使用了上述的一些函數(shù):實例#include <iostream> #include <cstring> using namespace std; int main () char str111 = "Hello" char str211 = "World" char str311; int len ; / 復(fù)制 str1 到 str3 strcpy( str3, str1); cout << "strcpy( str3, str1) : "
24、 << str3 << endl; / 連接 str1 和 str2 strcat( str1, str2); cout << "strcat( str1, str2): " << str1 << endl; / 連接后,str1 的總長度 len = strlen(str1); cout << "strlen(str1) : " << len << endl; return 0; 當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:strcpy( str3, str1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《變形觀測成果整》課件
- 汽車維修知識培訓(xùn)課件
- 2024幼兒園保育員幼兒心理健康維護(hù)聘用協(xié)議3篇
- 2024施工合同終止協(xié)議書范本
- 中國音樂學(xué)院《計算機(jī)輔助設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州工業(yè)應(yīng)用技術(shù)學(xué)院《巖土工程勘察》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江工商職業(yè)技術(shù)學(xué)院《機(jī)器人學(xué)及其應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年藥品包裝材料質(zhì)量檢測與醫(yī)療器械包裝規(guī)范協(xié)議3篇
- 2025年GRC構(gòu)件生產(chǎn)及環(huán)保涂裝一體化服務(wù)合同3篇
- 2024新能源汽車動力電池回收利用合作協(xié)議
- 非急救轉(zhuǎn)運(yùn)合同范例
- 車輛使用安全培訓(xùn)
- 肺結(jié)核的護(hù)理個案
- 陜西省漢中市2024-2025學(xué)年高一上學(xué)期12月第二次月考地理試題(含答案)
- 節(jié)前教育動員部署及安全檢查
- AutoCAD2024簡明教程資料
- 鉗工應(yīng)急救護(hù)知識
- 《中國傳統(tǒng)文化》課件模板(六套)
- 色卡-CBCC中國建筑標(biāo)準(zhǔn)色卡(千色卡1026色)
- 2023年上海市錄用公務(wù)員考試真題
- 義務(wù)教育歷史課程標(biāo)準(zhǔn)(2024年版)
評論
0/150
提交評論