




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 C+基礎(chǔ)入門變量與類型的附加知識標(biāo)識符的作用域Const限定符引用typedefn 作用域問題n 大多數(shù)作用域問題都很簡單,就是用大括號。n 全局作用域(global scope)n 局部作用域(local scope)作用域嵌套#include #include std:string s1 = “hello”;/s1 has global scopeint main()std:string s2 = “world”; /s2 has local scope/uses global s1; prints “hello world”std:cout s1 “ “ s2 std:endl;int
2、 s1 = 42; / s1 is local and hides global s1/uses local s1; prints “42 world”std:cout s1 “ “ s2 std:endl;return 0;#include int avar = 10;void main() int avar; avar = 20; :avar:avar = 30;/ 作用域運(yùn)算符 cout “ avar is “ avar endl; cout “ avar is “ :avar:avar b)b) t=a; t=a; else t=b; else t=b; return t; retur
3、n t; 給出以下程序的運(yùn)行結(jié)果#include iostream.hint func(int n)if(n0) return 1;else if(n=0) return 0;else return -1; void main() int n; coutPlease input n:“ n;coutthe result:“ func(n) endl; n請注意:C+中不允許函數(shù)定義嵌套,即在函數(shù)定義中再定義一個函數(shù)是非法的。一個函數(shù)只能定義在別的函數(shù)的外部,函數(shù)定義之間都是平行的,互相獨立的。例如:下面的代碼在主函數(shù)中非法非法嵌套了一個f()函數(shù)定義:void main()void main(
4、) void f()void f() / 函數(shù)的聲明函數(shù)的聲明函數(shù)聲明也稱函數(shù)模型(或函數(shù)原型)。在主調(diào)函數(shù)中,如果要調(diào)用另一個函數(shù),則須在本函數(shù)或本文件中的開頭將要被調(diào)用的函數(shù)事先作一聲明。聲明函數(shù),就是告訴編譯器函數(shù)的返回類型、名稱和形參表構(gòu)成,以便編譯系統(tǒng)對函數(shù)的調(diào)用進(jìn)行檢查。 函數(shù)聲明的一般格式為: 函數(shù)類型函數(shù)類型 函數(shù)名(形式參數(shù)表);函數(shù)名(形式參數(shù)表);例如:設(shè)有一函數(shù)的定義為:double func1(double a, int b, float c) 函數(shù)體正確完整的函數(shù)聲明應(yīng)為:double func1(double x, intdouble func1(double x
5、, int y, float z); y, float z); /末尾要加上分號函數(shù)調(diào)用:函數(shù)調(diào)用:在C+中,除了主函數(shù)main由系統(tǒng)自動調(diào)用外,其他函數(shù)都是由主函數(shù)直接或間接調(diào)用的。函數(shù)調(diào)用的語法格式為:函數(shù)名 (實際參數(shù)表);常見的函數(shù)調(diào)用有下列兩種:n方式一:方式一:將函數(shù)調(diào)用作為一條表達(dá)式語句使用,而不使用其返回值。若函數(shù)調(diào)用帶有返回值,則這個值將會自動丟失。若函數(shù)調(diào)用帶有返回值,則這個值將會自動丟失。例如:max(3,5);max(3,5);n方式二方式二:對于具有返回值的函數(shù)來說,把函數(shù)調(diào)用語句看作語句一部分,使用函數(shù)的返回值參與相應(yīng)的運(yùn)算或執(zhí)行相應(yīng)的操作。例如:intint a=
6、max(3,5); a=max(3,5); intint a=max(3,5)+1; a=max(3,5)+1;coutmax(3,5)endlcoutmax(3,5)endl; ;if(f1(a,b) if(f1(a,b) cout”true”endl cout”true”endl; ;intint a=2; a=2;a=max(max(a,3),5);a=max(max(a,3),5);n當(dāng)調(diào)用一個函數(shù)時,整個調(diào)用過程分為三步進(jìn)行:第一步是參數(shù)傳遞;第二步是函數(shù)體執(zhí)行;第三步是返回,即返回到函數(shù)調(diào)用表達(dá)式的位置。 參數(shù)傳遞n參數(shù)傳遞稱為“實虛結(jié)合”,即實參向形參傳遞信息,使形參具有確切地含
7、義(即具有對應(yīng)的存儲空間和初值)。這種傳遞又分為兩種不同的方式,一種是按值傳遞,另一種是地址傳遞或引用傳遞。按值傳遞#include iostream.hvoid swap(int,int);void main() int a=3,b=4; Couta=a,b=“ bendl; swap(a,b); couta=a,b=b endl; void swap(int x,int y) int t=x; x=y; y=t; n地址傳遞#include iostream.hvoid swap(int *,int *);void main() int a=3,b=4; couta=a,b=“ bendl
8、; swap(&a,&b); couta=a,b=“ bendl; 引用傳遞#includeusing namespace std;void Swap(int& a, int& b);int main()int x(5), y(10);coutx=x y=yendl;Swap(x,y);coutx=x y=yendl;return 0;void Swap(int& a, int& b)int t;t=a;a=b;b=t;運(yùn)行結(jié)果運(yùn)行結(jié)果:x=5 y=10 x=10 y=5t=a;x5t5x 的別名axy510y 的別名x 的別名aby 的別名x
9、的別名abx10y10a=bb=t;y5t5y 的地址bxy105Swap(x,y);26內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)n聲明時使用關(guān)鍵字 inline。n編譯時在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開銷。n注意:n內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語句和switch語句。n內(nèi)聯(lián)函數(shù)的聲明必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。#includeusing namespace std;inline double CalArea(double radius) return 3.14*radius*radius;int main()double r(3.0);double area;area=CalArea(r);
10、coutareaendl;return 0;默認(rèn)形參值的作用n函數(shù)在聲明時可以預(yù)先給出默認(rèn)的形參值,調(diào)用時如給出實參,則采用實參值,否則采用預(yù)先給出的默認(rèn)形參值。n例如:int add(int x=5,int y=6) return x+y;void main(void) add(10,20); /10+20 add(10); /10+6 add(); /5+6n默認(rèn)形參值必須從右向左順序聲明,并且在默認(rèn)形參值的右面不能有非默認(rèn)形參值的參數(shù)。因為調(diào)用時實參取代形參是從左向右的順序。n例:int add(int x,int y=5,int z=6); /正確int add(int x=1,int
11、 y=5,int z); /錯誤int add(int x=1,int y,int z=6); /錯誤重載函數(shù)n函數(shù)名相同n參數(shù)列表不同n例:int circle ( int i );double circle ( double b);n類型的自動轉(zhuǎn)換以匹配重載函數(shù)應(yīng)用舉例編寫三個名為add的重載函數(shù),分別實現(xiàn)兩整數(shù)相加、兩實數(shù)相加和兩個復(fù)數(shù)相加的功能。#includeusing namespace std;struct complexdouble real;double imaginary;void main(void)int m, n;double x, y;complex c1, c2,
12、 c3;int add(int m, int n);double add(double x, double y);complex add(complex c1, complex c2);coutmn;coutinteger m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y) endl;coutc1.realc1.imaginary;coutc2.realc2.imaginary;c3=add(c1,c2);coutcomplex number ( c1.real , c1.imaginary )+(c2.real, c2.imaginar
13、y)=(c3.real, c3.imaginary)n;int add(int m, int n) return m+n; double add(double x, double y) return x+y; complex add(complex c1, complex c2) complex c;c.real=c1.real+c2.real;c.imaginary=c1.imaginary+c2.imaginary;return c;運(yùn)行結(jié)果:Enter two integer: 3 5integer 3+5=8Enter two real number: 2.3 5.8real numb
14、er 2.3+5.8= 8.1Enter the first complex number: 12.3 45.6Enter the second complex number: 56.7 67.8complex number (12.3,45.6)+(56.7,67.8)= (69,113.4)3、數(shù)組和指針數(shù)組的概念和聲明指針運(yùn)算和地址運(yùn)算指針和動態(tài)分配的存儲空間數(shù)組的概念和聲明n數(shù)組是一段連續(xù)的內(nèi)存單元n聲明:char str10;n用下標(biāo)來訪問,從0到n-1。n作為一個地址,數(shù)組名可以賦值給一個合適類型的指針變量。如:char *s; s = str; s0 = z;指針運(yùn)算和地址運(yùn)算n
15、指針的基本概念聲明:int *a, *b;/聲明a、b為整形指針變量char *r, *s;/聲明r、s為字符型指針變量Account *u;/聲明指針u用來存放一個Account對象n操作符操作符& &和和* *&是取地址操作符*是取值操作符如:int *ap = &m3;給整形指針ap賦于整形數(shù)組m3的地址,這樣ap就指向了m3。注意:&僅僅適用于存儲在內(nèi)存中的數(shù)據(jù),不可用于常量,寄存器變量或者表達(dá)式。只能用指向相同類型的指針給另一個指針賦值,而在不同類型的指針之間進(jìn)行賦值是錯誤的。比如:int a,b; int *p1=&a,*p2=p1;
16、 /正確而:int a;int *p1=&a;double *p2=p1; /錯誤 void指針和const指針在C+語言中,可以聲明指向void類型的指針。指向void類型的指針稱為void指針。此外,在聲明指針時,還可以用關(guān)鍵字const進(jìn)行修飾,用關(guān)鍵字const修飾的指針稱為const指針。 void指針nC+語言允許使用空類型(void)指針,即不指定指針指向一個固定的類型,它的定義格式為: void void * *p;p;n表示指針變量p不指向一個確定的類型數(shù)據(jù),它的作用僅僅是用來存放一個地址。nvoid指針?biāo)梢灾赶蛉魏晤愋偷腃+數(shù)據(jù)。也就是說,可以用任何類型的指針直接
17、給void指針賦值。不過,如果需要將void指針的值賦給其他類型的指針,則需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。比如:int a; int *p1=&a; void *p2=p1;int *p4=(int *)p2; const指針關(guān)鍵字const放在不同的位置表示的意義也不相同: n關(guān)鍵字const放在指針類型前,就是聲明一個指向常量的指針。此時,在程序中不能通過指針來改變它所指向的值,但是指針本身的值可以改變,即指針可以指向其他數(shù)據(jù)。 Const char* p =“hello”;n關(guān)鍵字const放在“*”號和指針名之間,就是聲明一個指針常量(也稱常指針)。因此,指針本身的值不可改變,也即它不能
18、再指向其他數(shù)據(jù),但它所指向的數(shù)據(jù)的值可以改變。 Char* const p =“hello”n關(guān)鍵字const在上述兩個地方都加,則是聲明一個指向常量的指針常量,指針本身的值不可改變,它所指向的數(shù)據(jù)的值也不能通過指針改變。Const char*p const p =“hello”4、指針和動態(tài)分配的存儲空間nnew運(yùn)算符nDelete運(yùn)算符n應(yīng)用程序數(shù)據(jù)所占的內(nèi)存可以分為3類:靜態(tài)(常量)存儲區(qū)、棧、堆。在程序運(yùn)行開始前就分配的存儲空間都在靜態(tài)存儲區(qū)中;局部變量分配的存儲空間在棧中;動態(tài)內(nèi)存分配的存儲空間在堆中,堆也稱為自由存儲單元。new運(yùn)算符與delete運(yùn)算符一起使用,就可以直接進(jìn)行動態(tài)
19、內(nèi)存的申請和釋放(也稱為創(chuàng)建和刪除)。 mallocn函數(shù)malloc 的原型如下:void * malloc(size_t size);n用malloc 申請一塊長度為length 的整數(shù)類型的內(nèi)存:int *p = (int *) malloc(sizeof(int) * length);兩個要點是“類型轉(zhuǎn)換”和“sizeof”。 freen函數(shù)free free 的原型如下:void free( void * memblock );例:free(p);nnew運(yùn)算符用于申請所需的內(nèi)存單元,返回指定類型的一個指針。它的語法格式為:指針指針=new =new 數(shù)據(jù)類型;數(shù)據(jù)類型;例如:int *p;p = new int;系統(tǒng)自動根據(jù)int類型的空間大小開辟一個內(nèi)存單元,用來保存int型數(shù)據(jù),并將地址保存在指針p中。例如:int *p;p = new int10;則系統(tǒng)為指針p分配了整型數(shù)組的內(nèi)存,數(shù)組中有10個元
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦梗死患者個案護(hù)理
- 2025至2030年中國抗菌切菜板數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國打氣輪數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國手動多葉調(diào)節(jié)閥數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國異型玻璃下料機(jī)數(shù)據(jù)監(jiān)測研究報告
- 荒山轉(zhuǎn)讓與林業(yè)科技推廣合作2025年度合同
- 離婚協(xié)議中財產(chǎn)分割執(zhí)行期限補(bǔ)充協(xié)議(2025年度)
- 2025年度智慧城市知識產(chǎn)權(quán)歸屬及資源共享合同
- 2025年度綠色環(huán)保環(huán)氧地坪鋪設(shè)與保養(yǎng)合同
- 二零二五年度煤炭市場居間代理與風(fēng)險管理協(xié)議
- 2025蛇年中小學(xué)春節(jié)寒假安全教育課件模板
- 機(jī)械加工企業(yè)安全生產(chǎn)應(yīng)急預(yù)案(6篇)
- 康復(fù)護(hù)士講課課件
- 2024年學(xué)??蒲泄ぷ饔媱潱?篇)
- 學(xué)校食堂廚師崗位職責(zé)
- 職業(yè)生涯規(guī)劃的步驟與方法課件
- 如何做好4S管理
- 民航客艙應(yīng)急設(shè)備
- 化工總控工培訓(xùn)
- 【重點易錯題每日一練小紙條】二年級數(shù)學(xué)下冊
- 2024年小紅書初級營銷師題庫
評論
0/150
提交評論