《VC++程序設計》講稿.doc_第1頁
《VC++程序設計》講稿.doc_第2頁
《VC++程序設計》講稿.doc_第3頁
《VC++程序設計》講稿.doc_第4頁
《VC++程序設計》講稿.doc_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.第一章 C+入門教學目的:了解 +程序的基本特點 , 熟悉 Visual C+集成開發(fā)環(huán)境的基本使用方法。重點:了解 +程序的基本特點, Visual C+的集成開發(fā)環(huán)境。難點: C 語言、 +、VC 之間的關系1.1 軟件開發(fā)與 C+ 語言一、 C 語言的發(fā)展歷程B-C-C+Vc+B 是無類型語言(需解釋)C+是面向對象的語言(解釋) ,使開發(fā)軟件的可重用性、可維護性和可靠性,具有了極大的優(yōu)勢。C 是 C+的子集, C+是 C 的超集。VC 是可視化的 C+集成環(huán)境二、本課程的目的1.C+的程序結構(面向過程)2.VC 集成環(huán)境的使用3.面向對象的構成思想4.學習利用系統(tǒng)提供的對象進行面向

2、對象的編程(簡單)1.2 算法與程序算法:解決問題的方法和步驟程序:用計算機語言對算法的描述例 1:1.根據算法特性, 至少要有一個輸出, 如果使用 C 語言的 printf 和 scanf函數(shù)完成輸入輸出, 則必須打開 stdio.h 頭文件。c+中數(shù)據的輸入輸出通過 cin 和 cout 與、v1v2vn;1. :提取運算符2.提供數(shù)據時,數(shù)據間用空格(廣義)分開。3.所提供數(shù)據應與變量類型相一致,若不一致,會導致操作失敗或數(shù)據錯誤。(感興趣者可以仔細研究) 。二、輸出: coute1e2em;1.:插入運算符2.系統(tǒng)會根據輸出數(shù)據的類型,自動以相應的格式輸出1.5 程序設計語言的發(fā)展自學

3、1.6 C+ 程序的基本要素1.6.1 標識符、關鍵詞和標點符號一、標識符:程序中變量、類型、函數(shù)和標號的名稱1.區(qū)分大小寫2.組成規(guī)則,字母(含下劃線)開頭的字母數(shù)字串二、關鍵字關鍵字:具有特定作用,不能作為自定義標識符的字符組合。標準標識符:系統(tǒng)提供具有特定功能的常量、函數(shù)等,與關鍵字的區(qū)別是,關鍵字不能作為用戶自定義標識符,而標準標識符則可以,但是最好不要將其作為用戶自定義標識符。2/43.1.6.2 注釋編譯器把一個注釋作為一個空格字符處理。1.6.3 源程序一個 C+源程序由一個或多個源文件構成。習慣上,通常將變量、類型、宏和類等的定義放在一個源文件中(擴展名用 .h),然后在其他源

4、文件中引用這些定義量。在編制大型程序時尤其需要這樣,在學習階段,由于程序很小,所以可以不采用這種方法。1.7 編譯預處理1.7.1 宏定義無參宏格式: #define說明: 1.習慣上宏名采用大寫字母2.宏替換是一個機械過程有參宏格式: define 說明: 1.有參宏與函數(shù)的本質不同2.為防止宏替換出現(xiàn)問題,最好將參數(shù)和整個宏都用括號括起1.7.2 文件包含格式: #include 或 #include 文件名 說明: 1.文件包含的作用是將被包含文件嵌入到包含文件中2.在系統(tǒng)指定的目錄查找被包含文件;首先在當前目錄中查找,若找不到,再到指定目錄查找采用文件包含的方式,從物理角度是兩個文件,

5、但是對于C 語言系統(tǒng)而言,仍然是“一個”文件。1.8 Visual C+ 的集成開發(fā)環(huán)境Visual C+軟件包包含了許多獨立組件,如編輯器、編譯器、鏈接器、實用程序生成器、 調試器。我們運行 VC 所看到的界面是 VC 系統(tǒng)所提供的一個叫做 Developer Studio 的集成開發(fā)環(huán)境。開發(fā)環(huán)境會根據用戶使用的需要,自動調用一些相應組件。3/43.1.8.1 菜單和工具欄開發(fā)環(huán)境提供的界面與windows 下的其他軟件的界面窗口基本一樣,由標題欄、菜單欄、快捷圖標欄及編輯窗口和其他窗口等組成。1.除標題欄外,其他欄目均為停靠式, 可以用鼠標拖動改變它們的位置。2.快捷圖標欄由多種工具欄組

6、成,缺省狀態(tài)下由標準工具欄(StdandardBar),向導工具欄 (Wizard Bar),建立(編譯)微型欄 (Build MiniBar) 組成,如果希望在工具欄中出現(xiàn)其它欄目,可以通過工具 /定制 /工具欄進行有目的的設置。1.8.2 Developer Studio窗口整個集成環(huán)境的窗口中有多個窗口,分為兩種類型,一種是文檔窗口(帶邊框),多個窗口時以平鋪或層疊方式顯示;一種是??看翱冢笔顟B(tài)有兩個??看翱冢粋€是工作區(qū)(Workspace),一個是輸出窗口 (Output)。其他窗口在需要時會自動出現(xiàn),或者通過菜單命令,指定顯示某個窗口。1.8.3 用 Developer Stu

7、dio編寫和調試簡單C+程序編寫簡單程序的步驟:1. 選擇菜單文件 (File)/ 新建 (New) 中的工程 (Projects)選項卡,選擇Win32 Console Application(32 控制臺應用程序。 C+開發(fā)不同的程序需要選擇不同的工程項目,對于簡單的編程,選擇 Win32 Console Application 即可。2.為該工程項目起一個名字,填在右上方project name 上。下面的location 指明項目文件的存儲位置,用戶可自己設定。3.此時應用程序生成向導會提問要生成的項目類型。選擇An emptyproject(空項目),點擊 finish 、ok。系統(tǒng)

8、會自動產生目錄和一個工作區(qū)文件(.dsw),一個 .dsp,一個 .ncb 文件。4.再次選擇菜單文件( File )/新建( New)中的文件選項卡,從中選擇 C+ Source File,為該程序文件命名,單擊 OK。5.在編輯窗口內編輯程序、編譯、調試、運行。僅編譯: compile Ctrl+F7編譯加鏈接: build F74/43.執(zhí)行: executeCtrl+F5產生的文件均存放在相應源程序文件下的debug 目錄中。1.8.4 菜單選項、快捷鍵和工具欄第二章 控制結構教學目的:掌握結構化程序設計方法的基本思想和+的幾種基本控制轉移語句,熟悉使用偽代碼的編程方法。重點: C+的

9、控制結構。難點:分支循環(huán)結構2.1 程序的基本控制結構結構化的基本結構結構化的程序設計方法:以模塊化設計為中心,將需解決的問題劃分為若干個相互獨立的模塊。模塊的大小2.2 C+ 的控制結構2.2.1 順序結構相互間具有先后順序關系的模塊組合2.2.2 選擇結構1.概念選擇結構又稱分支結構。兩個模塊都有被執(zhí)行的可能,但每次只能有且只有一個被執(zhí)行。2.格式if ( 表達式 ) 語句 1 else 語句 23.注意事項(1)表達式必須用括號括起(2)表達式不對類型作任何要求(單變量方式)(3)復合語句的使用4.應用方式(1)逐情況判斷(2)假定5/43.(3)嵌套嵌套既可以嵌在then 子句上,也可

10、以嵌在else 子句上。注意:為了明確的表示嵌套關系,消除二義性,可以采用三種方法:1)將嵌套嵌在else子句上。2)寫齊所有子句。沒有語句的分支可以使用空語句。3)使用復合語句。當分支數(shù)在 34 個或更多一些,一般使用if 語句,若更多時,往往使用 switch 語句。逐情況法常見于初學者,假定法常用于熟練編程者。嵌套法則是熟練又希望程序比較高效者。2.2.3 循環(huán)結構1.語句格式while ( 表達式 )語句do語句while( 表達式 );for ( 表達式 1;表達式 2;表達式 3)語句2.語句功能1)while 和 for 均是當型循環(huán) ,do while 是直到型循環(huán)。2)所有的

11、表達式均對類型沒有特定要求。3)所有的循環(huán)體均為一條語句(復合語句)。4)所有的語句都是當條件成立時運行,不成立時退出。3.for 語句for 語句是 C 語言中極為靈活的一種語句, 當省略第一和第三表達式時,與 while 語句完全等效。2.3 結構化程序設計自頂向下、逐步細化、模塊化2.4 偽代碼類語言,接近語言,但又不是真正的語言,若需要轉化成語言時,只6/43.要作簡單的修改即可。與具體語言相比,語法不像具體語言的要求那么嚴格。2.5 結構化程序設計方法簡介解決大型軟件生產設計的設計基礎和方法。2.6 C+ 的其他控制轉移語句2.6.1 switch 語句格式注意事項1)switch

12、表達式雖然沒有類型要求,但最好不要是實型。2)case后的常量只能是一個常量表達式。3)當執(zhí)行符合條件的分支后,如無break 則繼續(xù)執(zhí)行下續(xù)語句。4)循環(huán)中含 switch 語句 ,或 switch 中含 switch,內部的 break 僅僅自內部跳出,不能跳出外部控制體。continue 只對循環(huán)起作用。2.6.2 goto 語句和語句標號goto 語句是無條件轉移語句,它可以將程序流程控制無條件地轉移到由標號所指定的語句處繼續(xù)執(zhí)行。使用 goto 構成的結構不一定是非結構化的,但非結構化的程序往往由于 goto 的因素。#include iosteam.hvoid main()int

13、i,j,k=0;for (i=1;i=10;i+)for (j=1;j100) goto out;out:couti=i,j=j,k=kendl;if (k500) goto in;2.6.3 break語句和 continue 語句1.break7/43.作用 :中止執(zhí)行循環(huán) ,使流程控制退出該循環(huán)控制結構,執(zhí)行該循環(huán)語句的下一語句。(還可用于 switch,但不能用于使用if 構成的循環(huán))雖然 break 屬于非結構化的語句, 但它對程序可讀性的破壞不嚴重,某種意義上,還容易提高程序的可讀性。2.continue作用 :僅實現(xiàn)從該語句位置將流程控制轉移到本次循環(huán)的結束位置。它結束的是本次循

14、環(huán),而不是跳出整個循環(huán)語句。幾乎所有出現(xiàn)該語句的地方,都可以通過改變算法而取消該語句的使用。對于多重循環(huán),這兩條語句都只能對包含它的語句起作用。2.6.4 exit()函數(shù)和 abort()函數(shù)作用:中止整個程序的運行。exit(): 結束程序前做一些善后工作。abort():強制結束程序。要求使用整數(shù)參數(shù)表示退出的原因。習慣上用0 表示正常退出,非0值表示非正常退出(程序調試) 。2.7 Developer Studio 的文本編輯器一、基本操作通用的鍵盤操作方式二、高級編輯Windows 環(huán)境下的一些操作第三章 基本數(shù)據類型教學目的:掌握幾種基本數(shù)據類型, 包括字符型、整型、長整型、浮點和

15、雙精度數(shù)據類型的基本概念, 以及常數(shù)、變量和數(shù)組的使用方法。重點: C+基本數(shù)據類型。難點:數(shù)組3.1 數(shù)據類型數(shù)據類型定義了變量可接受值的集合以及對它所能執(zhí)行的操作。類型的定義決定了三個方面的性質:8/43.a.該類型數(shù)據所占據內存空間的大?。〝?shù)據的取值范圍)b. 數(shù)據在內存中的存儲格式(定點、浮點)c.定義可以施加在該類型數(shù)據上的操作3.1.1 整型數(shù)據的表示方法整型數(shù)據在內存中的表示方法(補碼) ,字符型數(shù)據也可以認為是補碼方式。3.1.2 實型數(shù)據的表示方法實型數(shù)據在內存中的表示方法(浮點數(shù))3.2 常量3.2.1 整型常量十進制: yyy十六進制: 0xyyy八進制: 0yyy3.2

16、.2 實型常量格式:(x).(x)e(E)xx規(guī)定:小數(shù)點先后必須有一位數(shù)字e 的左面必須有數(shù)字(上面的要求) ,右面必須是整數(shù)尾數(shù)必須為十進制數(shù)說明: c 中的實型常量為雙精度型,如果需要特別指明為單精度型,可在實數(shù)后面加f 或 F3.2.3 字符常量定義:用單引號括起來的一個字符。c 語言支持擴展 ASCII 字符集,因此共包含256 個字符注意:1.轉義 ASCII 碼沒有十進制數(shù), 只有十六進制和八進制, 沒有X 就是八進制。 X 打頭時不能有 0。其取值范圍為ff,3772.任何字符都可以轉義方式給出, 一些常用控制字符給出了轉義字母,如 n,t,b,(, 在不引起誤解的情況下可以不

17、用,如whats,)3.非轉義字母前面加, 不起任何作用9/43.3.2.4 字符串常量字符串是用雙引號括起來的一系列字符。注意:當字符串中包含轉義字符時,轉義符后的數(shù)值后面不能跟隨引起誤解的符號。八進制數(shù)后面不能跟 07,十六進制不能跟 09 和a-f(A-F )。3.3 變量3.3.1 變量的聲明1.基本類型int 整型( 4byte) char 字符型(1byte) float 實型( 4byte)驗證: coutsize=4 的值時則有結束標志。沒有初值時為隨機字符,所以也沒有結束標志。3.字符數(shù)組的輸入輸出1)單字符輸入輸出以單字符方式讀取時,應注意添加結束標志(講一個讀不定長度字符

18、串的例子)11/43.2)以字符串方式輸入輸出注意:(1)讀取時不需要人為添加結束標志(2)以空格(廣義)為字符串的分隔標志4.相關的幾個函數(shù)strcpy(array,str)strcat(arraystr,str)strcmp(str1,str2)strlen(str)strlwr() strupr()strchr() 字符串中查找字符strrev() 反轉字符串strstr() 在字符串中查找字符串說明: array 數(shù)組(必須有足夠的空間) , str 字符串(數(shù)組、常量串、指針)在 C 中 array 可以為指針, VC 中只能是數(shù)組(教材中有錯誤)3.6 類型修飾符和常量修飾符自學內

19、容檢查驗證 _intxx 方式定義類型的大小3.7 枚舉類型格式: enum 枚舉類型名 枚舉元素表 ;說明:枚舉元素的序號自0 開始,按照先后順序排列,也可指定序號。指定序號時應預留足夠編碼空間,若不足,或者系統(tǒng)報錯,或者兩個元素具有相同的序號。枚舉量可以進行比較(如同字符,比較的是它們的序號)。枚舉元素是標識符,不是字符串,不能直接以串方式輸出,但枚舉變量可以直接輸出,輸出的是該元素的序號。3.8 typedef語句1.方法:1)按定義變量的方法寫出定義體2)將變量名換成類型名12/43.3)在最前面加上 typedef4)用新類型名定義變量2.說明類型定義僅僅是為一種類型起了一個別名,并

20、不能產生新的類型。3.9 Develper Studio 的文件處理功能主要討論了集成環(huán)境file 菜單的各個菜單的功能3.10 Visual C+ 程序的編譯、鏈接和運行3.11 查看和修改編譯、鏈接錯誤第四章 表達式教學目的:熟練掌握 +的各種表達式 , 特別是賦值表達式及其他有副作用的表達式。重點:邏輯運算符和邏輯表達式難點:運算符的優(yōu)先級和結合性總體注意:1.運算符的書寫方法。(與數(shù)學運算符的區(qū)別)2.運算符的功能。(單一功能還是多種功能,有沒有副作用)3.運算符的適用對象。4.運算符的優(yōu)先級和結合性。4.1 算術運算符和算術表達式1.運算符及優(yōu)先級+:加-:減*: 乘/:除和整除%:

21、取余*/% 高于 +-2.運算規(guī)則:操作數(shù)的類型應當一致, 若不一致則需要進行自動的類型轉換。轉換規(guī)則:字符型和單精度型只要參與運算則自動轉換為整型和雙精度型,其它類型的轉換總是向參與運算的高級別類型轉換。3.注意:有符號字符型 (含整型 )和無符號字符型參與運算對結果的影響。13/43. %運算要求運算數(shù)據必須為整型(含字符型) ,當操作數(shù)中含有負數(shù)時,結果的符號與被除數(shù)一致。/運算當操作數(shù)均為整型時,為整除運算 ,否則為除運算。表達式的類型由表達式計算的最終結果決定。(unsigned) char c=-1;int i;i=2*c;cout、=、 、邏輯運算符 & 和|級別相同(教材有誤)

22、int a,b,c,d;a=b=1;c=0;d=a+|b+&c+;couta=ab=bc=cendl;輸出為 210盡量避免對實型數(shù)進行等于或不等于的判斷,如果需要則采用|x-y|1e-4的方式 C 語言采用短路算法當運算不需繼續(xù)計算即可判斷計算結果的時候,可以不再繼續(xù)后續(xù)計算。(簡化運算過程)14/43.與運算的前項為假,后項被短路如:a+&b+|c+當首項為假時, b+被短路,但是 c+不能被短路對于全與表達式,第一項為假,后面全部不再計算或運算的前項為真,后項被短路如: a+|b+&c+ 當首項為真時, b+被短路, c+也被短路a=1;b=1;c=0;d=a+|b+&c+;couta=

23、ab=bc=cd=dendl;輸出為 2101按理 c+不應當被短路,但是特例: d=a+|b+&c+; 當首項為真時,后面的計算均被短路。 (先或后與,首項為真,后面不算)若首項為假,將上例a 初始為 0,則輸出結果為1 2 1 0,c+沒有被短路。應用意義: if (n!=0&m%n=0)如果不短路將會出現(xiàn)除以零的錯誤4.3 賦值運算符和賦值表達式1.運算符=、+=等,任何一個雙目運算符均可以和“=”結合組成復合運算符。2.作用計算賦值運算符右側表達式的值,將該值寫入該變量所對應的存儲空間。3.說明賦值運算符的級別極低(倒數(shù)第二) 。結合性為自右向左。4.賦值轉換c 語言允許不同類型數(shù)據間

24、可以相互賦值,由于他們存儲格式和取值范圍的不同,在賦值過程中會產生一些問題。15/43.字符型與短整型數(shù)據的賦值轉換c=s長送短:截高送低(會引起符號位的變化)s=c短送長:無、有正:送低高補0有負:送低高補1溢出的處理:對256 取余,若大于127 ,轉換二進制,求負數(shù)值2.短整型與整型數(shù)據的賦值轉換3.整型與實型數(shù)據的賦值轉換f=i無轉換誤差i=f小數(shù)點后截掉(截斷誤差) ,超出整型數(shù)所能表示范圍的溢出(溢出誤差)4.4 自增運算符1.格式i+(+i)2.作用在完成參加表達式運算的同時還完成自身的增量操作。3.分析i+: 先用后增,先參與表達式的計算,然后自身完成增量操作。+i: 先增后用

25、,先完成自身的增量操作,然后參與表達式的計算。4.注意 i+j 問題:先滿足左側變量的需求(左傾主義)在輸出語句(實參表)中出現(xiàn)時,按表達式自右向左解釋i=3;couti+iendl;將輸出 3 3顯然后一個 i 的值并沒有受到前面i+ 的任何影響。組合增量運算的理解分析 i=3; j=(i+)+(i+)+(i+);tc2.0 vc6.0+:i=6j=9tc3.0+: i=6j=12若仍然 i=3;cout(i+)+(i+)+(i+);16/43.cout3?i+4?L:R:N;2)和+運算合作問題ch=a+atc2.0 vc6.0+:0tc3.0+:1在關系表達式中出現(xiàn)時,c,vc 中視整體

26、為一個表達式。tc+視關系運算符兩側各為表達式ch=a+a?Y:N;17/43.tc2.0 tc3.0+:Y(1)vc6.0+:N(0)當關系式出現(xiàn)在條件運算符的第一個表達式中時,關系運算符兩側各為一個表達式。 tc 和 tc+都是如此( tc+是統(tǒng)一的)。但 vc+仍然視為一個表達式。2.逗號表達式格式:用逗號將多個表達式連接起來的式子。計算:按先后順序逐個計算,整個逗號表達式的值是逗號表達式中最后一個表達式的的值。(一定要注意運算符的優(yōu)先級)4.8 類型不同數(shù)據之間的混合算術運算c 語言系統(tǒng)類型轉換有兩種形式1.隱式轉換在計算過程中系統(tǒng)會根據需要自動進行轉換,如計算時的轉換、賦值轉換等。2

27、.顯式轉換格式:(類型名)變量名或(類型名)(表達式)說明:類型的強制轉換只能轉換表達式的值的類型,不能轉換變量的類型。變量的類型是不可能被轉換的。4.9 運行錯誤的判斷與調試4.10 基本調試手段4.11 注釋號在調試中的作用4.12 條件編譯格式: #if #ifdef#ifndef#else#endif第五章 函數(shù)教學目的:熟練掌握+函數(shù)的編寫和調用方法,以及內聯(lián)函數(shù)、函數(shù)重載和遞歸函數(shù)的概念。重點: +函數(shù)的編寫和調用方法難點:函數(shù)重載和遞歸函數(shù)18/43.5.1 函數(shù)的定義1.函數(shù)的格式存儲類別函數(shù)類型函數(shù)名(形式參數(shù)表)函數(shù)體 2.函數(shù)的類別性質:標準庫函數(shù),用戶自定義函數(shù)構成形式

28、:有參函數(shù),無參函數(shù)3.基本性質有且只有一個主函數(shù)。函數(shù)之間為平行關系,沒有位置的要求。函數(shù)定義不能嵌套 (調用可以嵌套 )。除了 main 函數(shù),任何一個函數(shù)都不能獨立地在程序中存在。4.說明 :函數(shù)類型規(guī)定了函數(shù)返回值的類型。函數(shù)的返回值需要一個存儲空間來存放,函數(shù)類型決定了這個空間的大小與格式。因此當返回值的類型與函數(shù)類型不一致時,存在一個自動的類型轉換問題,可以理解為:函數(shù)(變量)返回表達式。如果一個函數(shù)不需要返回值,通常將其定義為 void,此時系統(tǒng)不為函數(shù)開辟存放函數(shù)返回值的空間。 return 語句的作用:返回主調函數(shù)、將返回表達式的值寫入函數(shù)類型空間 (參考賦值運算的作用 )。

29、對于 void 類型函數(shù),仍然可以使用 return語句,但是后面不能跟任何的表達式, return 語句僅起到返回主調函數(shù)的作用。5.2 函數(shù)的調用1.格式表達式語句函數(shù)實參19/43.2.調用形式嵌套調用與遞歸調用3.說明主調函數(shù)調用被調用函數(shù)后,主調函數(shù)被壓入堆棧,調用被調用函數(shù)的程序代碼,當被調用函數(shù)執(zhí)行完畢,主調函數(shù)從堆棧中彈出,繼續(xù)執(zhí)行主調函數(shù)中的下續(xù)語句。因為這個原因,被調用函數(shù)并不能直接訪問主調函數(shù)中的各個變量。5.3 函數(shù)原型1.調用原則任何被調用函數(shù)必須在主調函數(shù)調用前進行聲明。函數(shù)聲明也就是函數(shù)原型。2.函數(shù)原型格式 : 函數(shù)名( );說明 :函數(shù)聲明是一個完整的函數(shù)首部

30、+“;”與函數(shù)相比,只是缺少函數(shù)體。3.聲明的形式被調函數(shù)在主調函數(shù)前定義。此時函數(shù)定義和函數(shù)聲明為一體。在主調函數(shù)中對被調函數(shù)進行聲明。在主調函數(shù)前,對被調函數(shù)進行全局聲明。特例: c 語言中函數(shù)類型為int 型時可以不聲明。(c+中必須聲明 )說明:當函數(shù)定義與函數(shù)聲明分開時,函數(shù)聲明中必須有形參類型,形參名可以省略,函數(shù)定義中c+不可省略函數(shù)參數(shù)( c 中可?。 中函數(shù)類型為整型時可以省略函數(shù)聲明。float max(float,float );void main()couty?x:y);5.4 函數(shù)間的參數(shù)傳遞5.4.1 值調用20/43.1.形參與實參的關系過程:實參向形參傳遞數(shù)

31、據。傳遞數(shù)據時,首先為形參開辟相應的存儲空間,然后計算實參的值,然后將實參的值寫入形參的空間中??梢岳斫鉃橄喈斢趫?zhí)行了一個賦值操作:形參實參,所以形參必須是個變量,而實參則可以是一個表達式。2.值傳遞與址傳遞通常將實參對形參的數(shù)據傳遞分為數(shù)值傳送(值傳送)和地址傳送(址傳送),但 c 語言中可以理解為都是值傳送。對于址傳送而言,由于此時的形參是存儲地址的量,實參的計算結果是個地址值,所以傳送的是地址。3.舉例swap()函數(shù)5.4.2 引用調用1.引用格式:類型& 引用名;例: int i,&yy=i;說明:引用的定義類似一個指針變量, 指針變量的特征符號是 *, 而引用的特征符號是 & 。引

32、用只能在定義時建立和變量的對應關系,在程序中不允許再次建立關系。舉例:int i,j,&yy=i,*p;i=3;j=4;p=&i;couti;coutyy;cout*p;p=&j;cout*p;yy=j ;(錯誤 )概念 :引用是為一個量規(guī)定一個別名。說明 :引用一般不在程序中使用,主要在參數(shù)傳遞中應用。21/43.2.引用作為函數(shù)參數(shù)引用形參:函數(shù)定義的參數(shù)表中, 名字前面加上符號 & 的參數(shù)為引用形參。說明 :引用的實參必須是同種類型的變量,不能是表達式。實參傳遞給引用形參的是實參的地址。引用是常值地址(借用這個概念,這里主要強調的是該值不允許改變 ,與教材中的常值指針變量意義不同)。引用

33、沒有相應的存儲空間,函數(shù)中對形參的訪問,實質上是對實參空間的訪問。使用引用時,與使用變量相同,不需要加引用符。函數(shù)執(zhí)行完畢,引用和實參的對應關系即中止。引用的主要用途是將實參的地址傳給形參,而且不允許改變形參的指向。舉 swap 的例子5.5 函數(shù)重載1.問題的提出具有相似作用的函數(shù),由于一些細小的差別,不得不定義很多函數(shù)。如絕對值函數(shù)。2.函數(shù)重載定義同名且功能相仿的函數(shù)。函數(shù)重載實際上是函數(shù)名重載,即支持多個不同的函數(shù)采用相同的名字。3.重載條件參數(shù)表中對應的參數(shù)類型不同。int max(int,int) float max(float,float)參數(shù)表中參數(shù)的個數(shù)不同。int max(

34、int,int,int) int max(int,int)參數(shù)表中不同類型參數(shù)的次序不同。float max(float,int) float max(int,float)4.重載的匹配函數(shù)重載要求編譯器能夠唯一地確定調用一個函數(shù)時應具體執(zhí)行哪個函數(shù)的代碼。當調用重載函數(shù)時,系統(tǒng)如何確定應當調用哪個函數(shù)呢?22/43.匹配原則:按照參數(shù)類型嚴格匹配通過內部類型轉換尋求匹配通過用戶定義的轉換進行轉換尋求匹配(用戶定義轉換不討論)5.說明僅僅函數(shù)類型不同不能重載。int max(int,int) float max(int,int)重載不能引起二義性。long max(long,long)floa

35、t max(float,float)調用時 max(c1,c2),字符型可以轉換為整型,但是由于long 不是基本類型,系統(tǒng)內一般不定義整型和實型的自動轉換。所以系統(tǒng)會不知道該調用哪一個函數(shù)而報錯。重載體現(xiàn)了對多態(tài)性的支持。5.6 局部變量和全局變量1 概念局部變量 :在函數(shù)內部定義的變量。全局變量 :在函數(shù)外部定義的變量。2.變量的作用范圍局部變量 :僅在定義該變量的函數(shù)內部(甚至復合語句內部)。全局變量 :自定義位置以下部分的函數(shù)(暫時) 。3.說明局部變量與全局變量重名時,在局部變量有效的范圍內,全局變量無效。小范圍的局部變量與大范圍的局部變量重名時,在小范圍內,大范圍的局部變量無效。盡

36、管全局變量提供了一種各個模塊間相互聯(lián)系的渠道,但是由于它破壞了程序的模塊化結構,降低了程序的可讀性,因此盡量避免使用。為了在重名的情況下能夠訪問全局變量,c+ 提供了 :域作用符,以訪問全局變量。5.7 內聯(lián)函數(shù)1.格式inline 函數(shù)23/43.2.說明內聯(lián)函數(shù)的關鍵字必須在說明中出現(xiàn),否則不會把函數(shù)作為內聯(lián)函數(shù)來處理。定義中有沒有inline 不作為是否是內聯(lián)函數(shù)的依據。內聯(lián)函數(shù)的函數(shù)體必須短?。?5 個語句),結構簡單( if 的復雜嵌套、 switch、循環(huán)都不行)。5.8 帶有默認參數(shù)的函數(shù)c+允許在聲明或定義函數(shù)時給形參預賦默認值,調用有默認值的函數(shù)時如果給實參,則實參傳遞給形參

37、,如果不給實參,則以默認值為實參值。說明 :1.默認值只能自右向左給出。2.聲明與定義分開時, 只能在聲明中指定默認值, 定義中不能有默認參數(shù)。3.既有默認參數(shù),又有函數(shù)重載時,注意不要產生二義性。例如: max(int a,int b) max(int a,float b=4) max(float a=3,int b=4)5.9 C+的庫函數(shù)5.10 函數(shù)模板講完類后再講5.11 變量的存儲類別局部量的存儲屬性 :static auto全局量的存儲屬性 :static externstatic,extern為靜態(tài)區(qū), auto 為動態(tài)區(qū)區(qū)別:時機。動態(tài)區(qū)數(shù)據的初始化在運行時完成,靜態(tài)區(qū)數(shù)據在

38、編譯時完成。初值。沒有初值時,動態(tài)區(qū)僅分配存儲空間,變量的值為隨機數(shù),靜態(tài)區(qū)變量自動初始為 0。生命期。動態(tài)區(qū)變量的生命期同它所在的函數(shù),靜態(tài)區(qū)變量的生命期為整個程序的生命期。初始化次數(shù)。動態(tài)區(qū)變量每執(zhí)行一次,則初始化一次,靜態(tài)區(qū)變量24/43.僅在程序執(zhí)行前初始化一次。全局變量的存儲類別問題:(1)全局變量的缺省類別為extern(函數(shù)的缺省類別也是extern)(2)全局變量的類別為static 時只能被本文件的函數(shù)訪問, 為 extern 時可以被所有文件的函數(shù)訪問。(3)訪問本文件的全局變量 :若全局變量在函數(shù)前面定義,不需聲明,否則必須聲明 (加 extern,無論該全局變量為什么類

39、別)。(4)訪問其它文件中的全局變量也必須進行聲明。注意:若使用多文件的全局變量,此時定義位置不能隨便使用extern,否則系統(tǒng)搞不清楚哪個是定義(有初值),哪個是聲明(無初值) 。例:靜態(tài)局部量與動態(tài)局部量的區(qū)別main() int k=4,m=1,p; p=func(k,m);printf(%d,p);p=func(k,m);printf(%dn,p);func(int a,int b)static int m=0;int i=2;i+=m+1;m=i+a+b;return(m);輸出結果 8,165.12 Develooper Studio的跟蹤調試功能第六章 指針教學目的:理解和掌握指

40、針的基本概念,以及指針型變量的聲明方法、怎樣通過指針類型的變量去訪問某個變量或數(shù)組元素的值;引用的概念和用法。重點:指針的使用方法難點:指針與數(shù)組和函數(shù)25/43.理解和掌握指針的基本概念,以及指針型變量的聲明方法、怎樣通過指針類型的變量去訪問某個變量或數(shù)組元素的值;引用的概念和用法。6.1 指針與地址6.1.1 地址1.概念地址:存儲空間的編號。變量名:地址空間的符號地址。2.表示地址的量變量的地址:可以通過運算符獲取&a。數(shù)組名:數(shù)組所占據連續(xù)空間的起始地址。函數(shù)的入口地址:函數(shù)名隱含了兩個地址,一個是函數(shù)的入口地址,一個是函數(shù)存儲數(shù)據的存儲地址。6.1.2 指針1.概念指針:即地址, C 語言中對于地址的一種稱呼方式。變量的指針:變量的地址。指針變量:專門用來存儲地址的變量。2.指針變量的定義格式:類型標識符* 變量名;說明:(1)* 僅是一個標識, 表明所說明的變量是一個指針變量。并不是變量名的組成部分。(2)指針變量是一種特殊變量,它用來存儲其

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論