第2章C對C的擴(kuò)充ppt課件_第1頁
第2章C對C的擴(kuò)充ppt課件_第2頁
第2章C對C的擴(kuò)充ppt課件_第3頁
第2章C對C的擴(kuò)充ppt課件_第4頁
第2章C對C的擴(kuò)充ppt課件_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、掌握C+言語在構(gòu)造化程序設(shè)計(jì)(非面向?qū)ο?方面對C言語擴(kuò)展的性能,為編寫面向?qū)ο蟮腃+程序打下根底。2.1 C+的特點(diǎn)的特點(diǎn)2.2 C+言語的文件擴(kuò)展名言語的文件擴(kuò)展名2.3 注釋符注釋符2.4 名字空間名字空間2.5 C+言語的輸入輸出言語的輸入輸出2.6 變量的定義變量的定義2.7 強(qiáng)迫類型轉(zhuǎn)換強(qiáng)迫類型轉(zhuǎn)換2.8 動(dòng)態(tài)內(nèi)存的分配與釋放動(dòng)態(tài)內(nèi)存的分配與釋放2.9 作用域運(yùn)算符作用域運(yùn)算符:2.10 援用援用2.11 const修飾符修飾符2.12 字符串字符串2.13 C+言語中函數(shù)的新特性言語中函數(shù)的新特性習(xí)題習(xí)題2.1 C+的發(fā)明人的發(fā)明人 Bjarne Stroustrup(本賈尼斯特

2、勞斯特盧普)博士,C+言語之父,1950年出生于丹麥,1979年在英國劍橋大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,AT&T、貝爾實(shí)驗(yàn)室和ACM成員。1979年,B. S開場開發(fā)一種言語,當(dāng)時(shí)稱為“C with Class,1983年演化為C+。2019年,ANSI/ISO C+規(guī)范建立,同年,B. S推出了其經(jīng)典著作The C+ Programming Language的第三版。 Stroustrup博士是C+言語的設(shè)計(jì)者和第一位實(shí)現(xiàn)者,該言語業(yè)已成為世界上最通用的支持面向?qū)ο蠹夹g(shù)的程序設(shè)計(jì)言語。2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史90年代初的年代初的Turbo C+2.1 C+開發(fā)工具的歷史

3、開發(fā)工具的歷史90年代中期的年代中期的Borland C+ for dos 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史90年代中期的年代中期的Borland C+ Builder for Win 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史21世紀(jì)的世紀(jì)的visual C+ 6.0 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史visual studio 2019 2.1 C+的特點(diǎn)的特點(diǎn) C+言語既保管了言語既保管了C言語的有效性、靈敏性、言語的有效性、靈敏性、便于移植等全部精華和特點(diǎn),又添加了面向?qū)ο蟊阌谝浦驳热烤A和特點(diǎn),又添加了面向?qū)ο缶幊痰闹С?,具有?qiáng)大的編程功能,可方便地構(gòu)編程的支持,具有強(qiáng)

4、大的編程功能,可方便地構(gòu)造出模擬現(xiàn)實(shí)問題的實(shí)體和操作;編寫出的程序造出模擬現(xiàn)實(shí)問題的實(shí)體和操作;編寫出的程序具有構(gòu)造明晰、易于擴(kuò)展等優(yōu)良特性,適宜于各具有構(gòu)造明晰、易于擴(kuò)展等優(yōu)良特性,適宜于各種運(yùn)用軟件、系統(tǒng)軟件的程序設(shè)計(jì)。用種運(yùn)用軟件、系統(tǒng)軟件的程序設(shè)計(jì)。用C+編寫編寫的程序可讀性好,生成的代碼質(zhì)量高,運(yùn)轉(zhuǎn)效率的程序可讀性好,生成的代碼質(zhì)量高,運(yùn)轉(zhuǎn)效率僅比匯編言語慢僅比匯編言語慢10%20%。 為了使編譯器可以區(qū)別是為了使編譯器可以區(qū)別是C C言語還是言語還是C+C+言語,言語,C+C+言語體系規(guī)定用言語體系規(guī)定用“.cpp“.cpp( (意即意即C Plus-Plus)C Plus-Plu

5、s)作為作為C+C+言語源文件的擴(kuò)展名以區(qū)別于言語源文件的擴(kuò)展名以區(qū)別于C C言語用的言語用的“.C“.C文件擴(kuò)展名。雖然僅差兩個(gè)字母,但編譯文件擴(kuò)展名。雖然僅差兩個(gè)字母,但編譯時(shí)的處置卻相差甚遠(yuǎn)。時(shí)的處置卻相差甚遠(yuǎn)。 “cpp “cpp的文件擴(kuò)展名與的文件擴(kuò)展名與操作系統(tǒng)無關(guān)。與操作系統(tǒng)無關(guān)。與C+C+言語源文件相關(guān)的頭文件擴(kuò)言語源文件相關(guān)的頭文件擴(kuò)展名普通仍用展名普通仍用“.h“.h,但有些操作系統(tǒng)也有規(guī)定,但有些操作系統(tǒng)也有規(guī)定運(yùn)用運(yùn)用“.hpp“.hpp充任頭文件擴(kuò)展名的。充任頭文件擴(kuò)展名的。 1. 1. 段注釋:段注釋: / /* * */ / 2. 2. 單行注釋:單行注釋:/ /

6、 當(dāng)只做單行注釋時(shí)便當(dāng)只做單行注釋時(shí)便可用可用“/“/符號表示從此符號起至行尾均符號表示從此符號起至行尾均為行注釋內(nèi)容。為行注釋內(nèi)容。 3. 3. 程序編譯時(shí)將忽略一切的注釋內(nèi)容。程序編譯時(shí)將忽略一切的注釋內(nèi)容。 名字空間域是隨規(guī)范名字空間域是隨規(guī)范C+C+而引入的。它相當(dāng)而引入的。它相當(dāng)于一個(gè)更加靈敏的文件域全局域,可以用于一個(gè)更加靈敏的文件域全局域,可以用花括號把文件的一部分括起來,并以關(guān)鍵字花括號把文件的一部分括起來,并以關(guān)鍵字namespacenamespace開頭給它起一個(gè)名字:開頭給它起一個(gè)名字:namespace ns1namespace ns1 float a,b,c; flo

7、at a,b,c; fun1() fun1() 花括號括起來的部分稱聲明塊。聲明塊中可以包括:花括號括起來的部分稱聲明塊。聲明塊中可以包括:類、變量帶有初始化、函數(shù)帶有定義等。在域外類、變量帶有初始化、函數(shù)帶有定義等。在域外運(yùn)用域內(nèi)的成員時(shí),需加上名字空間名作為前綴,后面加運(yùn)用域內(nèi)的成員時(shí),需加上名字空間名作為前綴,后面加上域操作符上域操作符“:“: 。這里添加了名字空間稱號的成員名。這里添加了名字空間稱號的成員名被稱為限定修飾名。如:被稱為限定修飾名。如:ns1:ans1:a,ns1:fun1()ns1:fun1()等等。等等。 最外層的名字空間域稱為全局名字空間域最外層的名字空間域稱為全局

8、名字空間域global global namespace scopenamespace scope,即文件域。,即文件域。名字空間域可分層嵌套,同樣有分層屏蔽作用。例如:名字空間域可分層嵌套,同樣有分層屏蔽作用。例如:namespace n1namespace n1 namespace n2 namespace n2 / / 名字空間嵌套名字空間嵌套 class matrix class matrix / / 名字空間類成員名字空間類成員matrixmatrix 訪問訪問matrixmatrix,可寫:,可寫:n1:n2:matrix n1:n2:matrix 。運(yùn)用運(yùn)用usingusing聲

9、明可只寫一次限定修飾名。聲明可只寫一次限定修飾名。usingusing聲明以關(guān)鍵聲明以關(guān)鍵字字usingusing開頭,后面是被限定修飾的開頭,后面是被限定修飾的qualifiedqualified名字空名字空間成員名,例如:間成員名,例如:using n1:n2:matrix;using n1:n2:matrix;/ / 名字空間類成員名字空間類成員matrixmatrix的的usingusing聲明聲明以后在程序中運(yùn)用以后在程序中運(yùn)用matrixmatrix時(shí),就可以直接運(yùn)用成員名,而時(shí),就可以直接運(yùn)用成員名,而不用運(yùn)用限定修飾名。不用運(yùn)用限定修飾名。運(yùn)用運(yùn)用usingusing指示符可以

10、一次性地使名字空間中一切成員都指示符可以一次性地使名字空間中一切成員都可以直接被運(yùn)用,比可以直接被運(yùn)用,比usingusing聲明方便。聲明方便。usingusing指示符以關(guān)鍵指示符以關(guān)鍵字字usingusing開頭,后面是關(guān)鍵字開頭,后面是關(guān)鍵字namespacenamespace,然后是名字空間,然后是名字空間名。名。 規(guī)范規(guī)范C+C+庫中的一切組件都是在一個(gè)被稱為庫中的一切組件都是在一個(gè)被稱為stdstd的名字空間中聲明和定義的。在采用規(guī)范的名字空間中聲明和定義的。在采用規(guī)范C+C+的平臺上運(yùn)用規(guī)范的平臺上運(yùn)用規(guī)范C+C+庫中的組件,只需寫庫中的組件,只需寫一個(gè)一個(gè)usingusing

11、指示符:指示符: using namespace std; using namespace std; 就可以直接運(yùn)用規(guī)范就可以直接運(yùn)用規(guī)范C+C+庫中的一切成員。庫中的一切成員。 留意:假設(shè)運(yùn)用了名空間留意:假設(shè)運(yùn)用了名空間stdstd,那么在運(yùn)用,那么在運(yùn)用#include#include編譯預(yù)處置命令包含頭文件時(shí),必需編譯預(yù)處置命令包含頭文件時(shí),必需去掉頭文件的擴(kuò)展名去掉頭文件的擴(kuò)展名.h.h,否那么會(huì)出錯(cuò)。,否那么會(huì)出錯(cuò)。C+言語另外定義了一套流對象與運(yùn)算符來替代言語另外定義了一套流對象與運(yùn)算符來替代C言語中對規(guī)范輸入輸出函數(shù)言語中對規(guī)范輸入輸出函數(shù)scanf和和printf的援用。的援

12、用。C+言語的保管字為:言語的保管字為:cout“輸出內(nèi)容輸出內(nèi)容“輸入內(nèi)容輸入內(nèi)容;/cin為規(guī)范輸入流對象為規(guī)范輸入流對象(默許從鍵盤輸入默許從鍵盤輸入)#include 輸入重定向輸入重定向【例【例2.1】C+的輸入輸出舉例。的輸入輸出舉例。#include / 運(yùn)用名空間運(yùn)用名空間std,那么必需去掉,那么必需去掉.h擴(kuò)展擴(kuò)展名名using namespace std; void main() char name10; int age; coutname; coutage; coutname is nameendl; coutage is ageendl;補(bǔ)充補(bǔ)充(寫出程序執(zhí)行結(jié)果,假

13、定輸入寫出程序執(zhí)行結(jié)果,假定輸入1和和2)#include / 運(yùn)用名空間運(yùn)用名空間std,那么必需去掉,那么必需去掉.h擴(kuò)展擴(kuò)展名名using namespace std; void main() char ch1,ch2;int n1,n2;cinch1ch2;n1=ch1-0;n2=n1*10+(ch2-0);coutn2;補(bǔ)充補(bǔ)充(寫出程序執(zhí)行結(jié)果寫出程序執(zhí)行結(jié)果)#include / 運(yùn)用名空間運(yùn)用名空間std,那么必需去掉,那么必需去掉.h擴(kuò)展擴(kuò)展名名#includeusing namespace std; void main() int n,count=0;for(n=1;n=1

14、00;+n)coutsetfill(*)setw(10)n;count+;if(count%5=0) coutendl;程序執(zhí)行結(jié)果程序執(zhí)行結(jié)果 在在C C言語中,部分變量闡明必需置于可執(zhí)行代碼段之前,言語中,部分變量闡明必需置于可執(zhí)行代碼段之前,不允許部分變量聲明和可執(zhí)行代碼混合在一同。但不允許部分變量聲明和可執(zhí)行代碼混合在一同。但C+C+在變量的定義上作了兩種較大的改動(dòng),一是允許變量的在變量的定義上作了兩種較大的改動(dòng),一是允許變量的定義語句可以出如今程序的任何位置,使得部分變量的定義語句可以出如今程序的任何位置,使得部分變量的定義點(diǎn)與運(yùn)用點(diǎn)不至于離得太遠(yuǎn),加強(qiáng)程序的可讀性,定義點(diǎn)與運(yùn)用點(diǎn)不

15、至于離得太遠(yuǎn),加強(qiáng)程序的可讀性,而且也不用在編寫某一程序塊的開場時(shí)就思索要用到哪而且也不用在編寫某一程序塊的開場時(shí)就思索要用到哪些變量;二是允許直接運(yùn)用構(gòu)造體名定義變量,這種擴(kuò)些變量;二是允許直接運(yùn)用構(gòu)造體名定義變量,這種擴(kuò)展為程序員在編程中提供了不少方便。類似地在展為程序員在編程中提供了不少方便。類似地在C+C+言言語中結(jié)合名、枚舉名也可在定義后獨(dú)立地作為類型名運(yùn)語中結(jié)合名、枚舉名也可在定義后獨(dú)立地作為類型名運(yùn)用。用。格式:格式:(數(shù)據(jù)類型數(shù)據(jù)類型) (表達(dá)式表達(dá)式)數(shù)據(jù)類型數(shù)據(jù)類型 (表達(dá)式表達(dá)式)(1) (1) 經(jīng)過強(qiáng)迫類型轉(zhuǎn)換,得到一個(gè)所需類型的中間值,經(jīng)過強(qiáng)迫類型轉(zhuǎn)換,得到一個(gè)所需類

16、型的中間值,該中間值被援用后即自動(dòng)釋放。原來表達(dá)式的值類型并該中間值被援用后即自動(dòng)釋放。原來表達(dá)式的值類型并未改動(dòng)。如以下代碼段:未改動(dòng)。如以下代碼段:int b;float f;f=float(b);int b;float f;f=float(b);/ / 此時(shí)變量此時(shí)變量b b依然為依然為intint類型。類型。(2) (2) 強(qiáng)迫類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達(dá)強(qiáng)迫類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達(dá)式 起 作 用 , 而 對 其 他 部 分 不 起 作 用 。 如 表 達(dá) 式式 起 作 用 , 而 對 其 他 部 分 不 起 作 用 。 如 表 達(dá) 式float(i)flo

17、at(i)* *f f的含義是先將變量的含義是先將變量i i強(qiáng)迫類型轉(zhuǎn)換為強(qiáng)迫類型轉(zhuǎn)換為floatfloat類類型,然后與變量型,然后與變量f f運(yùn)算。運(yùn)算。(3) (3) 強(qiáng)迫類型轉(zhuǎn)換該當(dāng)用在不做轉(zhuǎn)換將影響表達(dá)式結(jié)果強(qiáng)迫類型轉(zhuǎn)換該當(dāng)用在不做轉(zhuǎn)換將影響表達(dá)式結(jié)果的正確性或精度,或不能完成相應(yīng)運(yùn)算的場所。而對于的正確性或精度,或不能完成相應(yīng)運(yùn)算的場所。而對于系統(tǒng)可以自動(dòng)轉(zhuǎn)換類型的場所,那么沒有必要運(yùn)用。系統(tǒng)可以自動(dòng)轉(zhuǎn)換類型的場所,那么沒有必要運(yùn)用。棧內(nèi)存與堆內(nèi)存棧內(nèi)存與堆內(nèi)存??臻g是編譯時(shí)分配的固定大小的內(nèi)存。用于存放函??臻g是編譯時(shí)分配的固定大小的內(nèi)存。用于存放函數(shù)調(diào)用者的地址、前往值、保管的

18、機(jī)器形狀用于前數(shù)調(diào)用者的地址、前往值、保管的機(jī)器形狀用于前往、函數(shù)參數(shù)、部分變量和暫時(shí)變量等往、函數(shù)參數(shù)、部分變量和暫時(shí)變量等堆內(nèi)存是程序運(yùn)轉(zhuǎn)時(shí)分配的大小可變的內(nèi)存,也稱為堆內(nèi)存是程序運(yùn)轉(zhuǎn)時(shí)分配的大小可變的內(nèi)存,也稱為動(dòng)態(tài)內(nèi)存動(dòng)態(tài)內(nèi)存C+C+提供了兩種方法進(jìn)展內(nèi)存動(dòng)態(tài)分配和釋放提供了兩種方法進(jìn)展內(nèi)存動(dòng)態(tài)分配和釋放malloc()malloc()和和free()(free()(從從C C規(guī)范庫中承繼包含規(guī)范庫中承繼包含malloc.h)malloc.h)newnew和和deletedelete1.new運(yùn)算符運(yùn)算符 指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型; new從堆內(nèi)存中為程序分配可以

19、保管某種類型從堆內(nèi)存中為程序分配可以保管某種類型數(shù)據(jù)的一塊內(nèi)存空間,并前往指向該內(nèi)存的首數(shù)據(jù)的一塊內(nèi)存空間,并前往指向該內(nèi)存的首地址,該地址存放于指針變量中。地址,該地址存放于指針變量中。 堆內(nèi)存可以按照要求進(jìn)展分配,程序?qū)?nèi)存堆內(nèi)存可以按照要求進(jìn)展分配,程序?qū)?nèi)存的需求量隨時(shí)會(huì)發(fā)生變化,有時(shí)程序在運(yùn)轉(zhuǎn)中的需求量隨時(shí)會(huì)發(fā)生變化,有時(shí)程序在運(yùn)轉(zhuǎn)中能夠會(huì)不再需求由能夠會(huì)不再需求由new分配的內(nèi)存空間,而且分配的內(nèi)存空間,而且程序還未運(yùn)轉(zhuǎn)終了,這時(shí)就需求把先前占用的程序還未運(yùn)轉(zhuǎn)終了,這時(shí)就需求把先前占用的內(nèi)存空間釋放給堆內(nèi)存,以后重新分配,供程內(nèi)存空間釋放給堆內(nèi)存,以后重新分配,供程序的其它部分運(yùn)用

20、。序的其它部分運(yùn)用。2.delete運(yùn)算符運(yùn)算符運(yùn)算符運(yùn)算符delete用于釋放用于釋放new分配的內(nèi)存空間,它的分配的內(nèi)存空間,它的運(yùn)用方式為:運(yùn)用方式為:delete 指針變量;指針變量;其中的指針變量保管著其中的指針變量保管著new動(dòng)態(tài)分配的內(nèi)存的首地動(dòng)態(tài)分配的內(nèi)存的首地址。址。3. 留意:留意:(1) 用用new獲取的內(nèi)存空間,必需用獲取的內(nèi)存空間,必需用delete進(jìn)展釋放;進(jìn)展釋放;(2) 對一個(gè)指針只能調(diào)用一次對一個(gè)指針只能調(diào)用一次delete;(3) 用用delete運(yùn)算符作用的對象必需是用運(yùn)算符作用的對象必需是用new分配的分配的內(nèi)存空間的首地址。內(nèi)存空間的首地址。#incl

21、ude using namespace std;void main()int *p;p=new int; / 分配內(nèi)存空間分配內(nèi)存空間*p=5;cout*p;delete p; / 釋放內(nèi)存空間釋放內(nèi)存空間【例【例2.3】new與與delete運(yùn)用舉例。運(yùn)用舉例。(分析運(yùn)轉(zhuǎn)結(jié)果分析運(yùn)轉(zhuǎn)結(jié)果)在用在用new分配內(nèi)存的同時(shí)進(jìn)展初始分配內(nèi)存的同時(shí)進(jìn)展初始化。運(yùn)用方式為:化。運(yùn)用方式為:指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型(初始值初始值);例如上例中的:例如上例中的:p=new int;*p=5;也可寫成:也可寫成:p=new int(5); 指針變量指針變量 = new = new 數(shù)據(jù)類

22、型數(shù)據(jù)類型 數(shù)組大小數(shù)組大小 ;此時(shí)指針變量指向第一個(gè)數(shù)組元素的地址。運(yùn)此時(shí)指針變量指向第一個(gè)數(shù)組元素的地址。運(yùn)用用newnew分配數(shù)組時(shí),不能提供初始值。運(yùn)用分配數(shù)組時(shí),不能提供初始值。運(yùn)用newnew建立的數(shù)組變量也由建立的數(shù)組變量也由deletedelete釋放。其方式為:釋放。其方式為:delete delete 指針變量;或指針變量;或delete delete 指針變量;指針變量;同樣,也可以用同樣,也可以用newnew來為多維數(shù)組分配空間,但來為多維數(shù)組分配空間,但是除第一維可以為變量外,其它維數(shù)都必需是是除第一維可以為變量外,其它維數(shù)都必需是常量。常量。4用用new建立數(shù)組類型

23、的變量建立數(shù)組類型的變量 留意在運(yùn)用留意在運(yùn)用delete時(shí),不用思索數(shù)組的維數(shù)。時(shí),不用思索數(shù)組的維數(shù)。有時(shí),并不能保證一定可以從堆內(nèi)存中獲得所需空間,有時(shí),并不能保證一定可以從堆內(nèi)存中獲得所需空間,當(dāng)不能勝利地分配到所需求的內(nèi)存時(shí),當(dāng)不能勝利地分配到所需求的內(nèi)存時(shí),new前往前往0,即空,即空指針。因此我們可以經(jīng)過判別指針。因此我們可以經(jīng)過判別new的前往值能否為的前往值能否為0,來,來得知系統(tǒng)中能否有足夠的空閑內(nèi)存來供程序運(yùn)用。例如:得知系統(tǒng)中能否有足夠的空閑內(nèi)存來供程序運(yùn)用。例如:int *p= new int100;if(p=0)cout cant allocate more mem

24、ory,terminating. endl;exit(1);其中其中exit函數(shù)的作用是終止程序運(yùn)轉(zhuǎn)。函數(shù)的作用是終止程序運(yùn)轉(zhuǎn)。#include using namespace std;void main() int n; / 定義數(shù)組元素的個(gè)數(shù)定義數(shù)組元素的個(gè)數(shù) int *p; coutn; if(p=new intn)=0) cout cant allocate more memory,terminating. endl; exit(1); / 分配內(nèi)存空間分配內(nèi)存空間 for( int i=0;in;i+) pi= i *2; coutNow output the array : end

25、l; for( i=0;in;i+) coutpi ; coutendl; delete p; / 釋放內(nèi)存空間釋放內(nèi)存空間【例【例2.4】從堆內(nèi)存中獲取一個(gè)整型數(shù)組,賦值后并打印出來。】從堆內(nèi)存中獲取一個(gè)整型數(shù)組,賦值后并打印出來。 通常情況下,假設(shè)全局變量與部分變量同通常情況下,假設(shè)全局變量與部分變量同名,那么部分變量在其作用域內(nèi)具有較高的優(yōu)名,那么部分變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)。先權(quán)。C C言語規(guī)定只能在變量的作用域內(nèi)運(yùn)用該言語規(guī)定只能在變量的作用域內(nèi)運(yùn)用該變量,不能運(yùn)用其他作用域中的變量,可采用變量,不能運(yùn)用其他作用域中的變量,可采用C+C+中提供的作用域運(yùn)算符中提供的作用域運(yùn)算

26、符:,它能指定所需求,它能指定所需求的作用域。的作用域。 留意:不能用留意:不能用:訪問函數(shù)中的部分變量。訪問函數(shù)中的部分變量。在在C+C+言語中作用域運(yùn)算符言語中作用域運(yùn)算符:還用來限定類的成還用來限定類的成員,員, #include using namespace std;float a=2.4; / 全局變量全局變量void main() int a=8; / 部分變量部分變量coutaendl;cout:aendl; / :a表示全局作用域中的變量表示全局作用域中的變量a #include void main() int x10,i,j; j=0; /計(jì)數(shù)器初值賦計(jì)數(shù)器初值賦0 cou

27、tinput 10 numbers:endl; for(i=0;ixi; for(i=0;i0) j+; coutj=j;從鍵盤上輸入從鍵盤上輸入1010個(gè)整數(shù),統(tǒng)計(jì)其中的正整數(shù)的個(gè)數(shù)個(gè)整數(shù),統(tǒng)計(jì)其中的正整數(shù)的個(gè)數(shù) 程序運(yùn)轉(zhuǎn)結(jié)果:程序運(yùn)轉(zhuǎn)結(jié)果:(從鍵盤輸入:從鍵盤輸入:-2 3 4 -5 -3 9 -23 0 -1 21)輸出:輸出:j=4 用冒泡排序法對用冒泡排序法對10個(gè)數(shù)按從小到大的順序輸出個(gè)數(shù)按從小到大的順序輸出思想:冒泡法的根本思想是對數(shù)組元素做假設(shè)干次思想:冒泡法的根本思想是對數(shù)組元素做假設(shè)干次的的遍歷調(diào)整,每次遍歷都是對相鄰的兩個(gè)數(shù)兩兩比較遍歷調(diào)整,每次遍歷都是對相鄰的兩個(gè)數(shù)兩兩

28、比較并調(diào)整,將小的調(diào)到前頭,大的調(diào)到后面。并調(diào)整,將小的調(diào)到前頭,大的調(diào)到后面。4739147391437914379143719第一趟循環(huán)4次43719347193471934179第二趟循環(huán)3次341793417931479第三趟循環(huán)2次3147913479第四趟循環(huán)1次5 5個(gè)數(shù)個(gè)數(shù)#include void main()int a11; int i,n,t; /i表示數(shù)組下標(biāo),表示數(shù)組下標(biāo),n表示遍歷次數(shù),表示遍歷次數(shù),t用來交換數(shù)據(jù)用來交換數(shù)據(jù) coutinput 10 numbers:endl; for(i=1;iai; coutendl; for(n=1;n=9;n+) for(

29、i=1;iai+1) t=ai;ai=ai+1;ai+1=t; coutthe sorted numbers:endl; for(i=1;i11;i+) coutai ; coutendl;程序運(yùn)轉(zhuǎn)結(jié)果:程序運(yùn)轉(zhuǎn)結(jié)果:input 10 numbers:1 32 13 0 23 9 45 8 19 -7 the sorted numbers:-7 0 1 8 9 13 19 23 32 45#include #include void main() char str20; int i,j; cin.get(str,20); j=strlen(str);for(i=j-1;i=0;i-)cout.

30、put(stri); 從鍵盤上輸入一個(gè)字符串,然后將其逆序輸出從鍵盤上輸入一個(gè)字符串,然后將其逆序輸出運(yùn)轉(zhuǎn)的結(jié)果是:運(yùn)轉(zhuǎn)的結(jié)果是:從鍵盤輸入:從鍵盤輸入:abcdefg gfedcbal運(yùn)用字符串常量來對字符數(shù)組初始化。例如lchar str10=student;l或者直接將花括號省略,寫成如下的方式lchar str10=student;l留意: l字符串常量所占的空間一定不能超越字符數(shù)組的長度。假設(shè)字符串常量占用的空間小于數(shù)組的長度,那么后面的元素自動(dòng)的賦值為0 l用cout輸出。格式為:lcout字符串或字符數(shù)組名;l用cout流對象的put。格式為:lcout.put(字符或字符變量)

31、;l這種方法,每次只能輸出一個(gè)字符;要輸出整個(gè)字符串,應(yīng)采用循環(huán)的方法 #include void main()char s20=This is a string.;int i=0;while(si!=0)cout.put(si);i+;l用cout流對象的write方法。格式為:lcout.write(字符串或字符數(shù)組名,個(gè)數(shù)n);l其作用是輸出字符數(shù)串中的前n個(gè)字符。 #include void main()char s20=This is a string.;cout.write(s,4);分析該程序的輸出結(jié)果l利用cin直接輸入。格式為:lcin字符數(shù)組名;l用這種方法輸入字符串時(shí),c

32、in只能接納空格之前的部分。也就是說,當(dāng)字符串中有空格時(shí),用這種方法無法接納全部的字符串。l利用cin流對象的getline方法。格式為:lcin.getline(字符數(shù)組名,輸入字符串的最大長度n);l參數(shù)“字符數(shù)組名是存放字符串的數(shù)組稱號l參數(shù)“輸入字符串的最大長度n包括了字符串終了標(biāo)志0在內(nèi) l字符串的銜接函數(shù)strcatl調(diào)用的普通方式:strcat(char ,const char );#include #include void main() char st120=qing,st2=huadaxue; strcat(st1,st2); cout字符串2,前往值0; l字符串1字符串

33、2,前往值0 l字符串、字符串2可以是字符數(shù)組也可以是字符串常量。 l字符串的比較不能運(yùn)用以下的方式: l if(s1=s2) coutyes;l 只能運(yùn)用該函數(shù)來進(jìn)展比較。所以應(yīng)該寫成:l if(strcmp(s1,s2)=0) coutyes;#include #include void main()char str120,str220,str350; cin.getline(str1,20); cin.getline(str2,20); if (strcmp(str1,str2)0)strcpy(str3,str1); strcat(str3,str2); else strcpy(str

34、3,str2); strcat(str3,str1); coutstr3; 程序運(yùn)轉(zhuǎn)結(jié)果:從鍵盤輸入:China 那么輸出:BeijingChinal定義的普通方式為l類型闡明符 數(shù)組名常量表達(dá)式1常量表達(dá)式2 l例:int a53;l 表示a為整型二維數(shù)組,其中第一維有5個(gè)下標(biāo)04,第二維有3個(gè)下標(biāo)02,數(shù)組的元素個(gè)數(shù)為15,可以用于存放5行3列的整型數(shù)據(jù)表格。lC+言語中,二維數(shù)組在內(nèi)存中默許情況下采用行優(yōu)先存儲(對float a23畫存儲表示圖) l二維數(shù)組的初始化 l分行對二維數(shù)組賦初值。如l int a23=1,2,3,4,5,6; l對一切數(shù)據(jù)一同賦值,放在一個(gè)花括號中。如:l i

35、nt a23=1,2,3,4,5,6;l部分元素賦值 ,如:l int a23=1,2,4; l數(shù)組的元素全部賦值時(shí),可以省略數(shù)組的第一維長度 #include void main() int i,j,a23=3,0,1,10,-4,9; for(i=0;i=1;i+) for(j=0;j=2;j+) coutendlaij=aij;程序運(yùn)轉(zhuǎn)結(jié)果:程序運(yùn)轉(zhuǎn)結(jié)果:a00=3a01=0a02=1a10=10a11=-4a12=9編寫程序,將一個(gè)二維數(shù)組中行和列元素互換,存到另編寫程序,將一個(gè)二維數(shù)組中行和列元素互換,存到另一個(gè)二維數(shù)組中。設(shè)數(shù)組:一個(gè)二維數(shù)組中。設(shè)數(shù)組:思想:需求定義兩個(gè)數(shù)組思想:

36、需求定義兩個(gè)數(shù)組行列交換本質(zhì)上是將數(shù)組元素的行列下標(biāo)相互交換行列交換本質(zhì)上是將數(shù)組元素的行列下標(biāo)相互交換二維數(shù)組,必需求逐個(gè)的進(jìn)展交換,所以要用到了雙重二維數(shù)組,必需求逐個(gè)的進(jìn)展交換,所以要用到了雙重循環(huán)語句循環(huán)語句 a= b=159268862951#include void main() int a23=1,5,9,2,6,8; int b32,i,j; coutArray a: endl; /輸出原來數(shù)組的數(shù)據(jù)輸出原來數(shù)組的數(shù)據(jù) for(i=0;i2;i+) for(j=0;j3;j+) coutaij ; bji=aij; /將兩個(gè)數(shù)組元素相互交換將兩個(gè)數(shù)組元素相互交換 coutend

37、l; coutArray b:endl; /輸出交換后的數(shù)據(jù)元素輸出交換后的數(shù)據(jù)元素 for(i=0;i3;i+) for(j=0;j2;j+) coutbij ; coutendl; 程序運(yùn)轉(zhuǎn)結(jié)果:Array a:1 5 92 6 8Array b:1 25 69 8#include void main() int i,j; float a1010,sum=0,x; coutinput n*n Matrix:endl; for(i=0;i10;i+) for(j=0;jx;aij=x; for(i=0;i10;i+) sum=sum+aii+ai9-i; coutthe sum is:sum

38、endl;一條對角線元素的下標(biāo)特點(diǎn)是:行列下標(biāo)相等。另一一條對角線元素的下標(biāo)特點(diǎn)是:行列下標(biāo)相等。另一條對角線下標(biāo)特點(diǎn)是:行列下標(biāo)之和等于條對角線下標(biāo)特點(diǎn)是:行列下標(biāo)之和等于9。在每一行的每一列中找出這樣的元素然后把它加到變在每一行的每一列中找出這樣的元素然后把它加到變量量sum中去。中去。程序運(yùn)轉(zhuǎn)結(jié)果:程序運(yùn)轉(zhuǎn)結(jié)果:input 3*3 Matrix:1 3 52 4 6 7 8 9the sum is: 30從鍵盤輸入一個(gè)字符串判別能否為從鍵盤輸入一個(gè)字符串判別能否為“回文回文比如:比如:ABCBAABCBA#include #include void main()char str60;in

39、t i,j;cin.get(str,60);i=0;j=strlen(str)-1;while(stri=) i+; /尋覓前面第一個(gè)不是空格的字符尋覓前面第一個(gè)不是空格的字符 while(strj=) j-; /尋覓后面第一個(gè)不是空格的字符尋覓后面第一個(gè)不是空格的字符 while(ij & stri=strj)/前后對應(yīng)逐個(gè)的比較前后對應(yīng)逐個(gè)的比較 i+;j-;if(ij) coutNoendl;elsecoutYesendl;程序運(yùn)轉(zhuǎn)結(jié)果:從鍵盤輸入:程序運(yùn)轉(zhuǎn)結(jié)果:從鍵盤輸入:studeduts輸出的結(jié)果:輸出的結(jié)果:Yesj從字符串的最后一個(gè)從字符串的最后一個(gè)元素開場,所以初值元

40、素開場,所以初值為為strlen(str)-1 開場比較時(shí),將字符開場比較時(shí),將字符串前后的空格過濾掉串前后的空格過濾掉 援用是援用是C+言語的一個(gè)特殊的數(shù)據(jù)類型描畫,用于言語的一個(gè)特殊的數(shù)據(jù)類型描畫,用于在程序的不同部分運(yùn)用兩個(gè)以上的變量名指向同一地在程序的不同部分運(yùn)用兩個(gè)以上的變量名指向同一地址,使得對其中任一個(gè)變量的操作實(shí)踐上都是對同一址,使得對其中任一個(gè)變量的操作實(shí)踐上都是對同一地址單元進(jìn)展的。在這種兩個(gè)以上變量名的關(guān)系上,地址單元進(jìn)展的。在這種兩個(gè)以上變量名的關(guān)系上,被聲明為援用類型的變量名那么是實(shí)踐變量名的別名。被聲明為援用類型的變量名那么是實(shí)踐變量名的別名。援用運(yùn)算符為援用運(yùn)算符

41、為&,聲明援用的普通方式為:,聲明援用的普通方式為:數(shù)據(jù)類型數(shù)據(jù)類型 &援用變量名援用變量名 = 變量名;變量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型& 援用變量名援用變量名 = 變量名;變量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型 & 援用變量名援用變量名 = 變量名;變量名; 對援用進(jìn)展操作,實(shí)踐上就是對被援用的變量進(jìn)展對援用進(jìn)展操作,實(shí)踐上就是對被援用的變量進(jìn)展操作。援用不是值,不占存儲空間,聲明援用時(shí),目操作。援用不是值,不占存儲空間,聲明援用時(shí),目的的存儲形狀不會(huì)改動(dòng)。援用一旦被初始化,就不能的的存儲形狀不會(huì)改動(dòng)。援用一旦被初始化,就不能再重新賦值。再重新賦值。 【例【例2.5】

42、援用舉例。】援用舉例。(圖示變量及其援用并分析運(yùn)轉(zhuǎn)結(jié)果圖示變量及其援用并分析運(yùn)轉(zhuǎn)結(jié)果)#include void main() int num=50;int &ref=num;ref+=10;coutnum=numendl;cout ref=refendl; num+=40;cout num=numendl;coutref=refendl;闡明:闡明:(1) 在一行上聲明多個(gè)援用型變量在一行上聲明多個(gè)援用型變量(函數(shù)函數(shù))名時(shí),要在每名時(shí),要在每個(gè)變量個(gè)變量(函數(shù)函數(shù))名前都冠以名前都冠以“&符號。符號。(2) 援用不是變量,所以援用本身不能被修正,在程序援用不是變量,所以援用

43、本身不能被修正,在程序中對援用的存取都是對它所援用的變量的存取。中對援用的存取都是對它所援用的變量的存取。(3) 一個(gè)變量被聲明為援用時(shí)必需進(jìn)展初始化,除非這一個(gè)變量被聲明為援用時(shí)必需進(jìn)展初始化,除非這個(gè)援用是用作函數(shù)的參數(shù)或前往值,為援用提供的初始個(gè)援用是用作函數(shù)的參數(shù)或前往值,為援用提供的初始值應(yīng)為變量值應(yīng)為變量(包括對象包括對象)。援用一旦被初始化。援用一旦被初始化,就不能再重就不能再重新賦值。如新賦值。如ref=&j;但但ref=j是允許的。是允許的。(4) 由于援用不是變量,所以,不能闡明援用的援用,由于援用不是變量,所以,不能闡明援用的援用,也不能闡明數(shù)組元素的類型為援用數(shù)

44、組,或指向援用的也不能闡明數(shù)組元素的類型為援用數(shù)組,或指向援用的指針。例如:指針。例如:int &a5; / 錯(cuò)誤錯(cuò)誤int &*p;/ 錯(cuò)誤錯(cuò)誤由于指針也是變量,因此可以闡明對指針變量的援用。由于指針也是變量,因此可以闡明對指針變量的援用。例如:例如:int *a; int *&p=a; int b; p=&b; / a指向變量指向變量b(5) 援用與指針不同。指針的內(nèi)容或值是某一變量的內(nèi)援用與指針不同。指針的內(nèi)容或值是某一變量的內(nèi)存單元地址,而援用那么與初始化它的變量具有一樣的存單元地址,而援用那么與初始化它的變量具有一樣的內(nèi)存單元地址。指針是個(gè)變量,可以把

45、它再賦值成其它內(nèi)存單元地址。指針是個(gè)變量,可以把它再賦值成其它的地址,然而,建立援用時(shí)必需進(jìn)展初始化并且決不會(huì)的地址,然而,建立援用時(shí)必需進(jìn)展初始化并且決不會(huì)再指向其它不同的變量。再指向其它不同的變量。地址地址(6) 要留意區(qū)分援用運(yùn)算符和地址運(yùn)算符的區(qū)別。例要留意區(qū)分援用運(yùn)算符和地址運(yùn)算符的區(qū)別。例如:如:int num=50;int &ref=num;int *p=&ref; /&在賦值號右邊為地址運(yùn)算符在賦值號右邊為地址運(yùn)算符(7) 可以用一個(gè)援用初始化另一個(gè)援用。例如:可以用一個(gè)援用初始化另一個(gè)援用。例如:int num=50;int &ref1=num

46、;int &ref2=ref1;ref2=100;/ num被修正為被修正為100其中其中ref2也是對也是對num的援用。的援用。(8)可以把函數(shù)的參數(shù)闡明成援用以建立函數(shù)參數(shù)的援用傳送方式可以把函數(shù)的參數(shù)闡明成援用以建立函數(shù)參數(shù)的援用傳送方式益處:益處:C+的援用傳送方式的實(shí)參和形參指向同一內(nèi)存地址,的援用傳送方式的實(shí)參和形參指向同一內(nèi)存地址,減少值傳送引起的數(shù)據(jù)堆棧復(fù)制減少值傳送引起的數(shù)據(jù)堆棧復(fù)制防止地址傳送引起的地址溢出錯(cuò)誤防止地址傳送引起的地址溢出錯(cuò)誤C+提供援用的主要用途就是建立函數(shù)參數(shù)的援用傳送方式提供援用的主要用途就是建立函數(shù)參數(shù)的援用傳送方式C言語的函數(shù)參數(shù)傳送只能采

47、用值傳送和地址傳送言語的函數(shù)參數(shù)傳送只能采用值傳送和地址傳送三種傳送方式比較的例子三種傳送方式比較的例子交換兩個(gè)數(shù)交換兩個(gè)數(shù)用普通變量作為參數(shù)交換兩個(gè)數(shù)用普通變量作為參數(shù)交換兩個(gè)數(shù)采用傳值方式采用傳值方式#include #include void swap(int x,int y)void swap(int x,int y) int t; int t; t = x; t = x; x = y; x = y; y = t; y = t; void main()void main() int a = 1,b = 2; int a = 1,b = 2; cout cout交換前交換前,a=a,a=

48、a,b=bendl;b=bendl; swap(a,b); swap(a,b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=1,b=2交換功能未實(shí)現(xiàn)。交換功能未實(shí)現(xiàn)。闡明采用傳值方式時(shí),實(shí)參不受影響闡明采用傳值方式時(shí),實(shí)參不受影響 用指針變量作為參數(shù)交換兩個(gè)數(shù)用指針變量作為參數(shù)交換兩個(gè)數(shù)采用傳址方式采用傳址方式#include #include void swap(int void swap(int * * x,int x,int * * y) y) int t; int t; t = t

49、 = * *x;x; * *x = x = * *y;y; * *y = t;y = t; void main()void main() int a = 1,b = 2; int a = 1,b = 2; cout cout交換前交換前,a=a,a=a,b=bendl;b=bendl; swap(&a,&b); swap(&a,&b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳地址方式傳送參數(shù)。采用傳地址方式傳送參數(shù)。在函數(shù)中改動(dòng)了形參,就

50、是改動(dòng)了實(shí)參,由于他們是在函數(shù)中改動(dòng)了形參,就是改動(dòng)了實(shí)參,由于他們是指向同一地址的指針變量。指向同一地址的指針變量。因此交換功能實(shí)現(xiàn)因此交換功能實(shí)現(xiàn)用援用作為參數(shù)交換兩個(gè)數(shù)用援用作為參數(shù)交換兩個(gè)數(shù)采用傳援用方式采用傳援用方式#include #include void swap(int & x,int & y)void swap(int & x,int & y) int t; int t; t = x; t = x; x = y; x = y; y = t; y = t; void main()void main() int a = 1,b = 2; int

51、a = 1,b = 2; cout cout交換前交換前,a=a,a=a,b=bendl;b=bendl; swap(a,b); swap(a,b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳援用方式傳送參數(shù)。采用傳援用方式傳送參數(shù)。函數(shù)中的形參是主調(diào)函數(shù)中實(shí)參的援用。函數(shù)中的形參是主調(diào)函數(shù)中實(shí)參的援用。在函數(shù)中改動(dòng)了形參,就是改動(dòng)了實(shí)參,由于他們指在函數(shù)中改動(dòng)了形參,就是改動(dòng)了實(shí)參,由于他們指向同一地址。向同一地址。因此交換功能實(shí)現(xiàn)因此交換功能實(shí)現(xiàn)地址傳送和援用傳送的比

52、較。地址傳送和援用傳送的比較。援用作為參數(shù),主調(diào)函數(shù)可直接運(yùn)用變量名援用作為參數(shù),主調(diào)函數(shù)可直接運(yùn)用變量名地址作為參數(shù),主調(diào)函數(shù)要將變量地址傳送過去地址作為參數(shù),主調(diào)函數(shù)要將變量地址傳送過去援用作為參數(shù),函數(shù)可對形參變量直接操作援用作為參數(shù),函數(shù)可對形參變量直接操作地址作為參數(shù),函數(shù)需經(jīng)過指針對地址間接操作地址作為參數(shù),函數(shù)需經(jīng)過指針對地址間接操作(9) 有空指針,無空援用有空指針,無空援用(10) 援用不能用數(shù)據(jù)類型來初始化。如:援用不能用數(shù)據(jù)類型來初始化。如: int&ref=int; / error(11) 函數(shù)調(diào)用可以作為左值函數(shù)調(diào)用可以作為左值(函數(shù)前往值為援用類型函數(shù)前往值

53、為援用類型) 援用表達(dá)式是一個(gè)左值表達(dá)式,因此它可以出如今形、實(shí)參數(shù)援用表達(dá)式是一個(gè)左值表達(dá)式,因此它可以出如今形、實(shí)參數(shù)的任何一方。假設(shè)一個(gè)函數(shù)前往了援用,那么該函數(shù)的調(diào)用也可以的任何一方。假設(shè)一個(gè)函數(shù)前往了援用,那么該函數(shù)的調(diào)用也可以被賦值。普通說,當(dāng)前往值不是本函數(shù)內(nèi)定義的部分變量時(shí)就可以被賦值。普通說,當(dāng)前往值不是本函數(shù)內(nèi)定義的部分變量時(shí)就可以前往一個(gè)援用。在通常情況下,援用前往值只用在需對函數(shù)的調(diào)用前往一個(gè)援用。在通常情況下,援用前往值只用在需對函數(shù)的調(diào)用重新賦值的場所,也就是對函數(shù)的前往值重新賦值的時(shí)候。防止將重新賦值的場所,也就是對函數(shù)的前往值重新賦值的時(shí)候。防止將部分作用域中變

54、量的地址前往,就使函數(shù)調(diào)用表達(dá)式作為左值來運(yùn)部分作用域中變量的地址前往,就使函數(shù)調(diào)用表達(dá)式作為左值來運(yùn)用。用。函數(shù)前往值為援用類型表示該函數(shù)前往值是一個(gè)變量的別名,故可函數(shù)前往值為援用類型表示該函數(shù)前往值是一個(gè)變量的別名,故可將函數(shù)調(diào)用作為一個(gè)變量運(yùn)用而進(jìn)展賦值將函數(shù)調(diào)用作為一個(gè)變量運(yùn)用而進(jìn)展賦值【例【例2.82.8】統(tǒng)計(jì)學(xué)生中】統(tǒng)計(jì)學(xué)生中A A類學(xué)生與類學(xué)生與B B類學(xué)生各為多少個(gè)。類學(xué)生各為多少個(gè)。A A類學(xué)生的規(guī)類學(xué)生的規(guī)范是平均分在范是平均分在8080分以上,其他都是分以上,其他都是B B類學(xué)生。類學(xué)生。【補(bǔ)充例子】【補(bǔ)充例子】#include int & min(int &a

55、mp; i,int & j) if(i=j) return i; else return j;void main() int a = 3, b= 4; couta=a b=bendl; min(a,b)=5; couta=a b=bendl; min(a,b) = 0; couta=a b=bendl;【補(bǔ)充例子】【補(bǔ)充例子】#include int & min(int & i,int & j)/此函數(shù)的前往值是對參數(shù)此函數(shù)的前往值是對參數(shù)i和和j中小的那個(gè)變量的援用中小的那個(gè)變量的援用 if(i=j) return i; else return j;void

56、main() int a = 3, b= 4; couta=a b=bendl; min(a,b)=5; /由于函數(shù)的前往值為援用類型,所以可以為函數(shù)調(diào)用賦值由于函數(shù)的前往值為援用類型,所以可以為函數(shù)調(diào)用賦值 /為函數(shù)賦的值賦給兩個(gè)參數(shù)中的小者,所以為函數(shù)賦的值賦給兩個(gè)參數(shù)中的小者,所以a變?yōu)樽優(yōu)?,b仍為仍為4 couta=a b=bendl; min(a,b) = 0; /a不變,不變,b變?yōu)樽優(yōu)? couta=a b=bendl;(12)定義前往援用的函數(shù)時(shí),留意不要前往對該函數(shù)內(nèi)定義前往援用的函數(shù)時(shí),留意不要前往對該函數(shù)內(nèi)部分變量的援用。部分變量的援用。為什么為什么?由于部分變量的生存

57、期局限于函數(shù)內(nèi)部,函數(shù)前往時(shí)部分變量由于部分變量的生存期局限于函數(shù)內(nèi)部,函數(shù)前往時(shí)部分變量消逝,導(dǎo)致函數(shù)前往一個(gè)無效的援用。消逝,導(dǎo)致函數(shù)前往一個(gè)無效的援用。故函數(shù)前往的援用是對某一個(gè)函數(shù)參數(shù)的援用且這個(gè)參數(shù)本身故函數(shù)前往的援用是對某一個(gè)函數(shù)參數(shù)的援用且這個(gè)參數(shù)本身也是援用類型也是援用類型【例【例2.9】前往的部分作用域內(nèi)的變量,函數(shù)作為左值?!壳巴牟糠肿饔糜騼?nèi)的變量,函數(shù)作為左值。#define PI 3.1415926const float PI=3.1415926; 這個(gè)常量是有類型的,它有地址,可以用這個(gè)常量是有類型的,它有地址,可以用指針指向這個(gè)值,但不能修正它。指針指向這個(gè)值,但

58、不能修正它。C+建議用建議用const取代取代#define定義常量。定義常量。 (1) 運(yùn)用運(yùn)用const修飾符定義常量時(shí),必需初始化;修飾符定義常量時(shí),必需初始化;(2) 常量一旦被定義,在程序中任何地方都不能常量一旦被定義,在程序中任何地方都不能 再更改。再更改。(3) 假設(shè)用假設(shè)用const定義的是一個(gè)整型常量,定義的是一個(gè)整型常量,int可以可以省略。省略。(4) 與與#define定義的常量有所不同,定義的常量有所不同,const定義的定義的常量可以有本人的數(shù)據(jù)類型,這樣常量可以有本人的數(shù)據(jù)類型,這樣C+編譯編譯程序可以進(jìn)展更加嚴(yán)厲的類型檢查,具有良程序可以進(jìn)展更加嚴(yán)厲的類型檢查,

59、具有良好的編譯時(shí)的檢測性。好的編譯時(shí)的檢測性。 (5) 函數(shù)參數(shù)也可以用函數(shù)參數(shù)也可以用const闡明,用于保證明參在闡明,用于保證明參在該函數(shù)內(nèi)部不被改動(dòng),大多數(shù)該函數(shù)內(nèi)部不被改動(dòng),大多數(shù)C+編譯器能對具有編譯器能對具有const參數(shù)的函數(shù)進(jìn)展更好的代碼優(yōu)化。例如,經(jīng)過參數(shù)的函數(shù)進(jìn)展更好的代碼優(yōu)化。例如,經(jīng)過函數(shù)函數(shù)max求出整型數(shù)組求出整型數(shù)組a100中的最大值,函數(shù)原型中的最大值,函數(shù)原型應(yīng)該是:應(yīng)該是: int max(const int *pa); 這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。函數(shù)中對數(shù)

60、組元素的操作只許讀,不許寫。 除了計(jì)算外,文本處置也是編程過程中除了計(jì)算外,文本處置也是編程過程中一個(gè)非常重要的方面。在一個(gè)非常重要的方面。在C言語中運(yùn)用字符數(shù)言語中運(yùn)用字符數(shù)組和字符指針實(shí)現(xiàn)字符串,但是在組和字符指針實(shí)現(xiàn)字符串,但是在C+中提供中提供了一種既方便又好用的了一種既方便又好用的string類型。下面經(jīng)過一類型。下面經(jīng)過一個(gè)簡單的例子闡明個(gè)簡單的例子闡明string類型的運(yùn)用。類型的運(yùn)用?!纠纠?.10】字符串類】字符串類string的運(yùn)用。的運(yùn)用。【例【例2.10 】#include #include /運(yùn)用字符串運(yùn)用字符串string類型的程序應(yīng)包含頭文件類型的程序應(yīng)包含頭文件using namespace std;void main()string s,t;cout請輸入一個(gè)字符串請輸入一個(gè)字符串:s; / 由鍵盤輸入一行文本,并把它賦給由鍵盤輸入一行文本,并把它賦給sring類型的變量類型的變量s,留意:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論