




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
九、指針及其基本操作主要內(nèi)容指針類型概述指針類型的定義指針的基本操作指針類型概述需求:如何把數(shù)據(jù)的地址傳給一個函數(shù),以提高參數(shù)傳遞的效率?如何表示元素個數(shù)可變的復(fù)合數(shù)據(jù)?指針類型為解決上述問題提供了支持。指針是內(nèi)存地址的抽象,一個指針代表了一個內(nèi)存地址。指針類型是一種用戶自定義的簡單類型,它的值集是由一些內(nèi)存地址(指針)構(gòu)成。指針類型的定義指針類型的定義格式為:typedef<類型>*<指針類型名>;其中,<指針類型名>表示一個指針類型,其值集為所有<類型>數(shù)據(jù)的內(nèi)存地址。例如,下面定義了一個指針類型Pointer,其值集為所有int型數(shù)據(jù)的內(nèi)存地址:typedefint*Pointer;指針類型變量的定義指針類型變量(簡稱:指針變量)的定義格式:<指針類型名><指針變量名>;或<類型>*<指針變量名>;//指針類型與變量定義合一例如,下面定義了一個指針類型變量p:typedefint*Pointer;Pointerp;//p為一個指向整數(shù)類型數(shù)據(jù)的指針變量或int*p;//p為一個指向整數(shù)類型數(shù)據(jù)的指針變量注意:指針變量擁有自己的內(nèi)存空間,在該空間中存儲的是另一個變量的內(nèi)存地址。在一個定義中定義多個指針變量:int*p,*q;//p和q均為指針變量int*p,q;//p為指針變量,q為int型變量int*p,q;//p為指針變量,q仍然為int型變量typedefint*Pointer;Pointerp,q;//p和q均為指針類型的變量可以通過操作符“&”來獲取一個變量的內(nèi)存地址:&<變量名>例如:intx=1;int*p=&x;//p是個指針變量,它的值是x的地址圖示為:1px1px或獲取一個變量的內(nèi)存地址指針類型的基本操作賦值間接訪問指針運算intx,*p,*p1;doubley,*q;p=&x;//OK,p指向x。q=&y;//OK,q指向y。p=&y;//Error,類型不一致。q=&x;//Error,類型不一致。p1=p;//OK,p1指向p所指向的變量。p1=q;//Error,類型不一致。p=0;//OK,使得p不指向任何變量?;蛘?,寫成:p=NULL;p=120;//Error,120為int型。p=(int*)120;//OK,不建議使用。void*any_pointer;//通用指針any_pointer=&x;//OKany_pointer=&y;//OK指針賦值操作間接訪問操作(*和->)可以通過操作符“*”來訪問一個指針變量指向的變量,其格式為:
*<指針變量>例如:intx;int*p;x=1;p=&x;*p=2;//訪問p指向的變量,等價于:x=2;指針間接訪問操作的例子執(zhí)行操作:“x=1;”前,(假設(shè)120和124分別代表變量x和p的內(nèi)存地址)
x p120: ?
124:?執(zhí)行操作:“x=1;”后:
x p120: 1 124:?執(zhí)行操作:“p=&x;”后:
x p120: 1 124:120執(zhí)行操作:“*p=2;”后,
x p120: 2 124:120intx;int*p;x=1;p=&x;*p=2;???112120120通過一個指向結(jié)構(gòu)類型數(shù)據(jù)的指針變量來訪問結(jié)構(gòu)數(shù)據(jù)的成員時,可以寫成:
(*<指針變量>).<結(jié)構(gòu)成員>或<指針變量>-><結(jié)構(gòu)成員>例如:structA{inti; doubled; charch;};Aa;A*p=&a;......cout<<(*p).i<<p->d<<endl;//輸出a.i和a.d對于一個void*類型的指針變量,在訪問它所指向的數(shù)據(jù)時,需要把它轉(zhuǎn)換成指向某個具體類型的指針。例如:intx;void*p=&x;......*p=10;//Error*(int*)p=10;//OK請注意下面的問題:int*p;*p=1;//1賦值到哪里去了?一個指針加上或減去一個整型值實際加(或減)的值由該指針?biāo)赶虻臄?shù)據(jù)類型來定。例如:intx;int*p;p=&x+2;//p的值為x的地址加上sizeof(int)*2后得到的地址該操作通常用于以指針方式來訪問數(shù)組元素。例如:inta[10];int*p;p=&a[0];//p指向數(shù)組a的第一個元素這時,訪問數(shù)組a的元素可采用下面的形式:*p、*(p+1)、...、*(p+9)或者p[0]、p[1]、...、p[9]
指針的運算inta[10];intsum=0;......for(inti=0;i<10;i++)sum+=a[i];或者int*p=&a[0];for(inti=0;i<10;i++)
sum+=*(p+i);或者int*p=&a[0];for(inti=0;i<10;i++)sum+=p[i];兩個同類型的指針相減實際結(jié)果由指針?biāo)赶虻念愋蛠矶?。例如:int*p,*q;.........q-p...//結(jié)果為:(q的值-p的值)/sizeof(int)只有跟數(shù)組結(jié)合使用才有實際意義。例如:inta[10];int*p=&a[0];int*q=&a[3];cout<<q-p<<endl;//輸出3兩個同類型的指針比較比較它們所對應(yīng)的內(nèi)存地址的大小。例如:int*p,*q;......if(p<q)......//比較p和q中存儲的地址的大小只有跟數(shù)組結(jié)合使用才有實際意義。例如:inta[10],sum;......for(p=&a[0],q=&a[9],sum=0;p<=q;p++) sum+=*p;為什么不按下面的做法?for(inti=0,sum=0;i<10;i++) sum+=a[i];從執(zhí)行效率上考慮!intx=1;int*p=&x;cout<<*p;//輸出p指向的值(x的值)cout<<p;//輸出p的值(x的地址)特殊情況:對于指向字符的指針,含義不同charstr[]="ABCD";char*p=&str[0];cout<<*p;//輸出p指向的字符:Acout<<p;//輸出p指向的字符串:ABCDcout<<(void*)p//輸出p的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦梗死術(shù)中護(hù)理課件
- 情緒調(diào)節(jié)方法分享班會
- 基于秘密共享的數(shù)據(jù)安全保護(hù)方案研究
- 個人資產(chǎn)反擔(dān)保合同范例
- 2025至2030年中國雙通道圖書監(jiān)測系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 商丘房子改造租房合同范本
- 兼職淘寶客服合同范例
- 共用施工電梯合同范本
- 基于區(qū)塊鏈的農(nóng)業(yè)保險系統(tǒng)研究與設(shè)計
- 農(nóng)村房屋合建合同范本
- 乳腺癌患者的疼痛護(hù)理課件
- 研課標(biāo)說教材修改版 八年級下冊
- 抗生素種類歸納分類
- 江西宜春城市文化介紹
- 正常肌肉及常見肌病的病理學(xué)表現(xiàn)
- 小學(xué)語文新課標(biāo)學(xué)習(xí)任務(wù)群的基本理解和操作要領(lǐng)
- 國產(chǎn)自主可控數(shù)據(jù)庫采購項目技術(shù)標(biāo)準(zhǔn)和服務(wù)要求
- 機(jī)械設(shè)計說明書-激光熔覆送粉器設(shè)計
- 01-BUFR格式應(yīng)用指南(試用版)
- 體育測量與評價04心肺功能的測量與評價
- 提高意識風(fēng)險防范化解能力體會發(fā)言
評論
0/150
提交評論