




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1,6.1 選擇排序算法,實現(xiàn)功能: 將數(shù)組list中的n個數(shù)按照從大到小的順序排好之后再輸出它們(此n個數(shù)通過使用函數(shù)rand來自動產(chǎn)生)。,程序見p6_1.cpp,2,6.2 指針類型,6.2.1 指針變量說明,指針類型的變量說明格式為: 類型名*指針變量名=初值; 例如: int i=3; int *pi; /pi為int*型變量,其取值為一個int型變量的地址, /也稱pi為指向int型數(shù)據(jù)的指針變量(簡稱指針),3,pi = ),4,說明: 類型名:任一基本類型名,基本類型的派生類型名,用戶定義的類枚舉類型結(jié)構(gòu)類型聯(lián)合類型名。 類型名為void 時,稱為不確定類型的指針類型。 類型名
2、也可以是由類型名*表示的指針類型名,這時稱為多級指針(指針類型的指針)。 符號*:表示其后說明的變量為指針變量。 指針變量名:標識符。 初值:可缺省。它可以是該類型的某一變量的地址。,5,一個指針變量,可有三種狀態(tài): (1) 未賦任何值,“懸空”狀態(tài)。 (2) 被賦予NULL 值。未指向任一變量。 (3) 指向某一變量。,注:規(guī)定NULL 與整數(shù)0 通用,它是唯一可以賦給任一類型指針變量的值。,6,6.2.2 指針變量的操作,1. 取地址運算 /任一數(shù)組名字a都是一個常量指針, /代表數(shù)組的首地址, 也即, a總等同于int* pa=a; /pa為變量指針,此時pa與a /均指向數(shù)組a的首元素
3、 則,下述三種表示數(shù)組元素ai的方式是等同的: a0 *a *pa a1 *(a+1) *(pa+1) . a9 *(a+9) *(pa+9),11,另,下述三種表示數(shù)組元素ai之地址的方式也是等同的: 卻都是不正確的句子! 為什么?)。,12,另外需注意的是:pa是變量,它當前所指的元素可以隨時變化,從而pa+1,pa+等語句所指向的元素也跟著變化。 換句話說,使用指針變量去訪問數(shù)組元素時,應隨時檢查指針變量當前所指向的數(shù)組元素。 指針變量也可以指向二維、三維等多維數(shù)組元素,例如:二維數(shù)組 int a34的存儲結(jié)構(gòu)為:,13,2) 若p,q都為同類型的指針,則p-q為p與q之間的數(shù)據(jù)項數(shù)(當
4、p,q指向同一數(shù)組時,結(jié)果有意義)。,3. 指針的關(guān)系運算,指針變量可以參加關(guān)系運算。這要分三種情況: (1)一般指針可以進行相等和不等的比較,指向同一變量(地址)者為相等,否則不等。 (2)任一指針可以和指針常量NULL 進行相等和不等的比較。如一指針p 已經(jīng)指向了某變量,則它不等于NULL。,14,(3)數(shù)組指針,可以指向該數(shù)組的各個元素,且一個數(shù)組的各個元素在內(nèi)存中是順序存放的,故數(shù)組指針之間不但可以進行相等和不等比較,也可以進行大于,小于,大于等于,小于等于等的比較。,15,6.2.3 指針與數(shù)組,1指向數(shù)組元素的指針,2指向數(shù)組的指針,把數(shù)組作為整體,稱為指向數(shù)組的指針,對于這類指針
5、,其說明語句格式為: 類型名(*指針變量名)數(shù)組元素數(shù); 而指向多維數(shù)組的指針說明中,最后一項數(shù)組元素數(shù)可有多個。 指向數(shù)組的指針又叫行指針,指向數(shù)組元素的指針又叫列指針。,16,例如:int A34,(*pa)4; pa=A;,表示指針變量pa 是一個指向一維整型數(shù)組的指針,該數(shù)組包含四個整型元素。,執(zhí)行增量運算pa+;后,pa 指向一維數(shù)組A1,數(shù)組A1的四個元素是A10,A11,A12,A13。 它們也可表示為(*pa)0,(*pa)1,(*pa)2,(*pa)3。,17,例如: float *P=int *p12;int(*p2)4; p 是指向int 型變量的指針,p1 是由兩個整型
6、指針組成的指針數(shù)組,而p2則是一個指向一維整型數(shù)組的指針。,20,4. 指向指針的指針,例: int x, *p, *q; /q為指向指針的指針 x=123; p= /x, *p, *q之值均為123,21,若指向指針的指針變量p指向指針數(shù)組name首地址,則p+i指向namei即是namei的地址。 pi*(p+i):是namei的值,還是地址,是namei指向的目的變量(數(shù)組)的地址(首地址) *(p+i):是namei指向的目的變量(數(shù)組)的值(第0號元素的值) pij*(*(p+i)+j) (*(p+i)j:是namei指向的一維數(shù)組的第j號元素的值, 總之,p的地位相當于name,類
7、似于二維數(shù)組的首地址 。,22,6.2.4 字符串指針,字符串是一種特殊的數(shù)據(jù)形式,它實際上是一維字符數(shù)組。C+語言對于字符串的操作提供了多種手段,其中利用字符串指針是最方便的一種。, 說明與初始化,字符串指針沒有自己獨立的形式,其說明語句的格式與字符類型指針相同。,23,例如: char ch= a: char *pc1=,void swap(float pa,float pb) float t=pa; pa=pb; pb=t; ;,注意:并非只要使用指針作函數(shù)的參數(shù)就可實現(xiàn)雙向傳值。,31,2返回指針的函數(shù),說明格式:* ( );,例: int * f(); /f為無參函數(shù),其返回值類型
8、/為int*,即指針類型。 char * match(char c, char * str); /match為具有兩個參數(shù)的函數(shù), /其返回值類型為char*,即指針類型。,返回值為指針的函數(shù)稱為指針型函數(shù)。,32,下述示例性程序使用了返回指針值的自定義函數(shù),實現(xiàn)如下功能: 提示用戶輸入任意一個字符串,而后找到輸入串中第一個a字符出現(xiàn)的位置(若有的話),并輸出從a字符開始的子串; 若輸入串中不出現(xiàn)a字符的話, 輸出 “No match found”。,程序見p6_2.cpp,33,3指向函數(shù)的指針變量,函數(shù)不是數(shù)據(jù),但它與變量還是有兩點相通之處:一個是它有類型(返回類型),另一個是它也有地址,
9、稱為入口地址,故在有的書中也勉強地把函數(shù)仍歸為一種特殊的數(shù)據(jù)“類型”。 函數(shù)的地址也可作指針的值,這就是函數(shù)指針。,指向函數(shù)的指針變量的說明格式: (*指針變量名)(參數(shù)表);,34,例如:int(*pf)(float); 其中pf 是一個函數(shù)指針變量,由于對pf 的說明中已規(guī)定了函數(shù)的返回類型(有時還包括存儲類型)和參數(shù)表,因此,指針pf 只能夠指向這類函數(shù)。例如: int f1(float);int f2 (char);int f3(float);int f4 (float); 這時,下面的說明和賦值,就有合法與不合法的區(qū)別: int(*pf)(float)= /不合法 pf= (2)in
10、t* a; (3)int* a; (4)int a10; (5)int* a10; (6)int (*a)10; (7)int a( ); (8)int* a( ); (9)int (*a)( );,37,6.3 指針與動態(tài)內(nèi)存分配,通過使用new與delete單目運算符來實現(xiàn)動態(tài)變量的分配與撤消。 1) new 使用格式: new /動態(tài)變量 new ( ) new /動態(tài)數(shù)組 功能: 生成一個(或一批)所給類型的無名動態(tài)變量,返回所生成變量的指針值(首地址)。,38,例: int *pi, *pj, a=10; char *pc; pi = new int; *pi = a*a; pc =
11、 new char(A); pj = new int10;,39,2) delete 使用格式: delete delete 功能: 釋放通過new生成的動態(tài)變量(或動態(tài)數(shù)組),但指針變量仍存在。,40,例: int *pi, *pj; pi = new int; pj = new int10; . delete pi; /釋放動態(tài)變量*pi, 但指針變量pi仍存在 delete pj;,41,3) 使用示例,1.從鍵盤輸入10個int型數(shù),而后按輸入的相反順序輸出它們。要求使用new運算符動態(tài)申請數(shù)據(jù)空間存放數(shù)據(jù)。,程序見p6_5.cpp,注:在使用動態(tài)變量時,要注意保護動態(tài)變量的地址,不要
12、輕易地沖掉保存動態(tài)變量地址的指針變量的值,否則動態(tài)變量將丟失。,2.構(gòu)建人員檔案鏈表,程序見p6_8.cpp,42,6.4 引用類型,簡單的說,引用是某個變量或?qū)ο蟮膭e名。建立引用時,必須用某個變量名或?qū)ο竺麃韺λM行初始化,從而將該引用綁定在那一個變量或?qū)ο笊稀?即是說,建立引用并不重新為其分配內(nèi)存空間,引用只是另一變量或?qū)ο蟮膭e名,任何對引用的使用與改變都是對該引用所綁定的那一變量或?qū)ο蟮氖褂门c改變。,43,1. 引用的建立,建立引用的格式如下: ”之后,b與refb的當前值都將是55,而a與refa都在原有值2的基礎(chǔ)上增加了2,即當前值都變成了4。,44,2. 引用和指針的區(qū)別,引用和指
13、針從說明到使用上都有些相似,但在概念上卻有著明顯的不同。主要區(qū)別在以下幾個方面。 (1) 指針表示的是一個對象變量的地址,而引用則表示一個對象變量的別名。因此在程序中表示其對象變量時,前者要通過取內(nèi)容運算符“*”,而后者可直接代表。例如: int a;int *pa=,45,(2) 指針是可變的,它可以指向變量a,也可以指向變量b,而引用則只能在建立時一次確定(固定綁定在某一個變量上),不可改變。例如: int a,b=456;int *p=”的賦值只是將b的值(即456)賦給了與ra綁定的變量a;而后者試圖為引用ra重新建立新的綁定關(guān)系則會導致出現(xiàn)一個編譯錯誤(ra重定義,重復初始化)。,46,(3) 由于引用本身不是一個獨立的變量(它本身不具有獨立的變量地址,使用的是與其綁定的那一變量的地址),所以,不能出現(xiàn)引用的引用,不能出現(xiàn)元素為引用的數(shù)組,也不能使用指向引用的指針(注意,可以出現(xiàn)指針的指針、可以出現(xiàn)元素為指針的數(shù)組,也可以說明對指針的引用,這都緣于指針是獨立變量的緣故)。 int /OK! 可以說明對指針的引用 /將引用pref與int*類型的指針變量pi進行了綁定,47,3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Polygodial-pyridazine-生命科學試劑-MCE
- BOC-1S-3R-3-aminocyclopentanecarboxylic-acid-1S-3R-3-tert-Butoxycarbonyl-amino-cyclopentanecarboxylic-acid-生命科學試劑-MCE
- AE9C90CB-生命科學試劑-MCE
- 4-Trifluoromethyl-nicotinic-acid-4-Trifluoromethyl-pyridine-3-carboxylic-acid-生命科學試劑-MCE
- 2025年窯爐、熔爐及電爐合作協(xié)議書
- 2025年智能電網(wǎng)配電設(shè)備合作協(xié)議書
- 土建工程師合同管理與履約措施
- 2025年抽紗刺繡工藝品合作協(xié)議書
- 2024年倉庫主管工作年終總結(jié)
- 二零二五年度房屋抵押貸款合同
- 小學生讀書卡模板
- 小學二年級體育課《團身滾動》教案
- 級本科診斷學緒論+問診課件
- 熱導檢測器(TCD)原理與操作注意事項
- 專升本高等數(shù)學的講義80頁PPT課件
- 初中足球選拔測試標準
- 法社會學(上課)
- 沉積學與古地理
- 化工原理課程設(shè)計(換熱器)
- 糖尿病酮癥酸中毒ppt課件
- 沖擊地壓講座
評論
0/150
提交評論