




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、c/c+中字符指針數(shù)組及指向指針的指針的含義就指向指針的指針,很早以前在說指針的時候說過,但后來發(fā)現(xiàn)很多人還是比 較難以理解,這一次我們再次仔細說一說指向指針的指針。先看下面的代碼,注意看代碼中的注解:#include#includeusing namespace std;void print_char(char* array口,int len;/ 函數(shù)原形聲明void main(void/段 1char *a=abc,cde,fgh;/ 字符指針數(shù)組char* *b=a;/定義一個指向指針的指針,并賦予指針數(shù)組首地址所指向的第一個字符串的地址也就是abc0字符串的首地址cout*bt*(b+
2、1t*(b+2/段 2char* test=abc,cde,fgh;/注意這里是引號,表示是字符串,以后的地址每 加1就是加4位(在32位系統(tǒng)上int num=sizeof(test/sizeof(char*;/ 計算字符用個數(shù)print_char(test,num;cin.get(;/void print_char(char* array口,int len當調用的時候傳遞進來的不是數(shù)組,而是字符指針他每加1也就是加上sizeof(char*的長度for(int i=0;icout*array+下面我們來仔細說明一下字符指針數(shù)組和指向指針的指針,段 1中的程序是下 面的樣子:char *a=a
3、bc,cde,fgh;char* *b=a;cout*bt*(b+1t*(b+2char *a口定義了一個指針數(shù)組,注意不是char口, char口是不能同時初始化為三個 字符的,定義以后的a口其實內部有三個內存位置,分別存儲了 abc0,cde0,fgh0三個 字符串的起始地址,而這三個位置的內存地址卻不是這三個字符串的起始地址,在這個例子中a口是存儲在棧空間內的,而三個字符串卻是存儲在靜態(tài)內存空間內的const區(qū)域中的,接下去我們看到了 char* *b=a;這里是定義了一個指向指針的指針,如果你 寫成char *b=a;那么是錯誤的,因為編譯器會返回一個無法將 char* *3轉換給ch
4、ar * 的錯誤,b=a的賦值,實際上是把a的首地址賦給了 b,由于b是一個指向指針的指針, 程序的輸出 cout*bt*(b+1t*(b+2舛里旦abc cde fgh可以看出每一次內存地址的+1操作事實上是一次加sizeof(char*的操作,我們在 32位的系統(tǒng)中sizeof(char*的長度是4,所以每加1也就是+4,實際上是*a內部三個 位置的+1,所以*(b+1的結果自然就是cde了,我們這時候可能會問,為什么輸出是cde 而不是c一個呢?答案是這樣的,在c+中,輸出字符指針就是輸出字符串,程序會自動 在遇到0后停止.我們最后分析一下段2中的代碼,段2中我們調用了 print_ar
5、ray(這個函數(shù),這個 函數(shù)中形式參數(shù)是char *array口和代碼中的char *test一樣,同為字符指針,當你把參 數(shù)傳遞過來的時候,事實上不是把數(shù)組內容傳遞過來,test的首地址傳遞了進來,由于 array是指針,所以在內存中它在棧區(qū),具有變量一樣的性質,可以為左值,所以我們輸 出寫成了,cout*array+當然我們也可以改寫為cout這里在循環(huán)中的每次加1 操作和段1代碼總的道理是一樣的,注意看下面的圖!到這里這兩個非常重要的知識點我們都說完了 ,說歸說,要想透徹理解希望讀者 多動手,多觀察,熟能生巧。卜面是內存結構示意圖:枝print arraytest ooh: oi&ic/
6、c+指向指針的指針一個指針變量可以指向整型變量、實型變量、字符類型變量,當然也可以指向指針類型變量。當這種指針變量用于指向指針類型變量時,我們稱之為指向指針的指針變量,這話可能會感到 有些繞口,但你想到一個指針變量的地址就是指向該變量的指針時;這種雙重指針的含義就容 易理解了。下面用一些圖來描述這種雙重指針,見圖 6-13。在圖中,整型變量i的地址是&i,將其傳遞給指針變量p,則p指向i;實型變量j的地址是&j,將其傳遞給指針變量p,則p指向j;字符型變量ch的地址是&ch,將其傳遞給指針變量p,則p指向ch;整型變量x的地址是&x,將其傳遞給指針變量p2,則p2指向x, p2是指針變量,同時
7、,將p2的地址&p2傳遞給pl ,則pl指向p2o這里的pl就是我們談到的指向指針變量的 指針變量,即指針的指針。指向指針的指針變量定義如下:類型標識符*指針變量名例如:float*ptr;其含義為定義一個指針變量ptr,它指向另一個指針變量(該指針變量又指向一個實型變量)。由于指針運算符“整自右至左結合,所以上述定義相當于:float*(*ptr;卜面看一下指向指針變量的指針變量怎樣正確引用。例6-27用指向指針的指針變量訪問一維和二維數(shù)組。#include#includemain(int a10,b34,*p1,*p2,*p3,i,j;/是*p 指 3 向指針的指針變量 */for(i=0
8、;i10;i+scanf(%d”,&ai;/* 一維數(shù)組的輸入 */for(i=0;i3;i+for(j=0;j4;j+scanf(%d”,&bij;/* 二維數(shù)組輸入 */for(p1=a,p3=&p1,i=0;i10;i+printf(m,*(*p3+i;/*用指向指針的指針變量輸出一維數(shù)組*/printf(n;for(p1=a;p1-a10;p1+/*用指向指針的指針變量輸出一維數(shù)組*/p3=&p1;printf(m,*p3;printf(n;for(i=0;i3;i+/*用指向指針的指針變量輸出二維數(shù)組*/p2=bi;p3=&p2;for(j=0;j4;j+printf(m,*(*p3
9、+j;printf(n;for(i=0;i3;i+/*用指向指針的指針變量輸出二維數(shù)組*/p2=bi;for(p2=bi;p2-bi4;p2+p3=&p2;printf(m,*p3;printf(n;程序的存儲示意如圖6-14所示,對一維數(shù)組 a來說,若把數(shù)組的首地址即數(shù)組名賦給指針變量pl , pl就指向數(shù)組a,數(shù)組的各元素用 pl表示為,* (p1+i),也可以簡化為*p1+i表示。pl表示的數(shù)組元素* (p1+i)中的pl換成*p3即可,表示為如果繼續(xù)作將p3=&p1 ,則將pl的地址傳遞給指針變量p3, *p3就是pl。用p3來表示一維數(shù)組的各元素,只需要將用*(*p3+i。同樣,對二
10、維數(shù)組 b來說,bi表示第i行首地址,將其傳遞給指針變量p2,使其指向該行。該行的元素用p2表示為*(p2+i。若作p3=&p2 ,則表示p3指向p2 ,用p3表示的二維數(shù)組第i 行元素為:*(*p3+i。這與程序中的表示完全相同。運行程序:例6-28利用指向指針的指針變量對二維字符數(shù)組的訪問。#include#includemain(int i;staticcharc口16=clanguage,fox,computer,homepage;/*二維字符數(shù)組*/static char *cp尸c0,c1,c2,c3;指/*針數(shù)組 */static char *cpp;/* 指向字符指針的指針變量*/cpp=cp;/*將指針數(shù)組的首地址傳遞給指向字符指針的指針變量*/for(i=0;i4;i+/*按行輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遠程教育機構的技術支持策略
- 塑料行業(yè)的可回收材料控制措施
- 小學英語復習成果展示活動計劃
- 體育教育理論與實踐結合范文
- 實驗室廢物處置與環(huán)保措施的落實情況
- 制造業(yè)材料投入優(yōu)化計劃
- 民族團結進步條例在基層的實施心得體會
- 新能源項目施工周期及環(huán)境監(jiān)測措施
- 職業(yè)教育減負改革的心得體會
- 幼兒園小班教學活動安排計劃
- 2024年海城市屬事業(yè)單位考試試卷
- 《休閑農(nóng)業(yè)》課件 項目三 休閑農(nóng)業(yè)資源及開發(fā)
- 數(shù)學-江西省萍鄉(xiāng)市2024~2025學年度2025屆高三一??荚囋嚲恚ㄆ监l(xiāng)一模)試題和答案
- 2025年全國體育單招高三模擬沖刺政治試題(三)(解析版)
- 寧波十校2025屆高三3月聯(lián)考地理試卷(含答案)
- T-SZSA 021-2024 小型離網(wǎng)式家用光伏發(fā)電系統(tǒng)技術規(guī)范
- 2025年合作經(jīng)營民宿合同模板
- 部編版三年級語文下冊《蜜蜂》作業(yè)設計
- 三基三嚴習題庫(含答案)
- 2025年江蘇南通職業(yè)大學招聘事業(yè)編制人員34人歷年高頻重點提升(共500題)附帶答案詳解
- 食為天:2024中國食品飲料行業(yè)白皮書
評論
0/150
提交評論