版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第十一章用指針變量訪問下標(biāo)變量主要內(nèi)容概述:用指針變量訪問下標(biāo)變量的原因及預(yù)備知識一2023/2/51用指針變量訪問下標(biāo)變量的方法二用指針變量訪問下標(biāo)變量的適用場合三通過指針變量訪問下標(biāo)變量的原因靈活數(shù)組名作為指針時,是不可改變的,所指對象是固定的指針變量所指對象可以改變效率高(不詳細(xì)講)特定情況下比較效率,需要匯編語言的知識效率其實差別不大有些地方不允許用數(shù)組名表示下標(biāo)變量2023/2/52第一節(jié)概述for(i=0;i<=999999;i++)printf(“%d”,*(a+i));70.5870.3170.3070.18for(p=a,i=0;i<=999999;i++)printf(“%d”,*(p+i));70.0670.2669.5769.68for(p=a,i=0;i<=999999;i++)printf(“%d”,*(p++));70.4970.3269.6769.86for(p=a;p<=a+999999;p++)printf(“%d”,*p);70.8870.0670.1770.152023/2/53預(yù)備知識(知識回顧)1.用指針變量訪問普通變量的方法主函數(shù)中定義指針變量inta,*p;使指針變量指向一個對象p=&a;間接訪問*p=100;被調(diào)函數(shù)中intmain(){inta;
}voidf(){
}f(&a);............*p=100;......int*p第二節(jié)用到第三節(jié)用到第一節(jié)概述2023/2/54預(yù)備知識(知識回顧)2.數(shù)組名作為指針時,指向它的首元素一維數(shù)組的數(shù)組名,指向下標(biāo)變量二維數(shù)組的數(shù)組名,指向一維數(shù)組三維數(shù)組的數(shù)組名,指向二維數(shù)組......3.數(shù)組中的下標(biāo)變量在內(nèi)存中是連續(xù)存放的4.指針的運算指針加1,指向下一個對象,指針減一,指向上一個對象指針增加(減少)一個值,仍然是指針,類型不變2023/2/55第二節(jié)用指針變量訪問下標(biāo)變量的方法用指針變量訪問一維數(shù)組中的下標(biāo)變量12本節(jié)主要內(nèi)容用指針變量訪問二維數(shù)組中的下標(biāo)變量2023/2/56設(shè)有數(shù)組定義“inta[4];”,如何通過指針變量使a[0]變成100?通過指針變量訪問普通變量的方法(主函數(shù)中)定義指針變量inta,*p;給指針變量賦值p=&a;間接訪問*p=100;故訪問下標(biāo)變量a[0]的代碼應(yīng)是:定義指針變量inta[4],*p;給指針變量賦值p=&a[0];間接訪問*p=100;11.2.1
用指針變量訪問一維數(shù)組的下標(biāo)變量//p=a;2023/2/57要訪問a[0]、a[1]、a[2]...,如何操作?inta[4],*p;p=a;*p=100;*(p+1)=200;//a[1]=200;*(p+2)=300;//a[2]=300;......或者:
inta[4],*p;p=a;*p=100;p++;*p=200;p++;*p=300;......11.2.1
用指針變量訪問一維數(shù)組的下標(biāo)變量數(shù)組元素是連續(xù)存放的pp+1p+2p+3a[0]a[1]a[2]a[3]p訪問a[0]的代碼p指針加1,指向下一個對象2023/2/58練習(xí):利用指針變量輸出一維數(shù)組的所有元素解法1:inta[10]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;for(i=0;i<=9;i++)printf(“%3d”,*(p+i));
思考:若一開始讓p指向a[1],能否輸出所有元素的值?解法2:inta[10]={1,2,3,4,5,6,7,8,9,0},*p=a,i;for(i=0;i<=9;i++)printf(“%3d”,*(p++));解法3:inta[10]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<=a+9;p++)printf(“%3d”,*p);11.2.1
用指針變量訪問一維數(shù)組的下標(biāo)變量printf(“%3d”,*p);p++;*(p+i)也可以寫成:p[i]2023/2/59例:輸入10個整數(shù)存入數(shù)組,求和(通過指針變量)#include<stdio.h>intmain(){inta[10],i,sum=0,*p=a;for(i=0;i<=9;i++){scanf(“%d”,p);
sum+=*p;
p++;
}
printf(“%d\n”,sum);
return0;}
思考:循環(huán)結(jié)束時,p指向哪里?11.2.1
用指針變量訪問一維數(shù)組的下標(biāo)變量2000p2000200420082012......1sum0i1012320042008通過指針變量訪問二維數(shù)組中下標(biāo)變量的方法
inta[3][4],*p;p=&a[0][0];......//可訪問任意一個下標(biāo)變量
說明:上面的“p=&a[0][0];”,不要寫成:
p=a;//會被警告。賦值后p指向什么?最簡潔的寫法是:
p=a[0];或
p=*a;
2023/2/51011.2.2
用指針變量訪問二維數(shù)組的下標(biāo)變量a[0][0]a[0][1]a[0][2]a[0][3]pp+1p+2p+3p20002000a[1][0]p+4例:用指針變量輸出二維數(shù)組中各下標(biāo)變量的值方法1:inta[2][3]={1,2,3,4,5,6},*p=a[0],i,j;for(i=0;i<=1;i++)for(j=0;j<=2;j++)printf(“%3d”,*(p+3*i+j));方法2:
inta[2][3]={1,2,3,4,5,6},*p=a[0],i;for(i=0;i<=5;i++)printf(“%3d”,*(p+i));//*(p+i)也可寫成*(p++)方法3:inta[2][3]={1,2,3,4,5,6},*p;for(p=a[0];p<=a[0]+5;p++)printf(“%3d”,*p);2023/2/51111.2.2
用指針變量訪問二維數(shù)組的下標(biāo)變量p<=a[0]+5改成p<=a+5可否?結(jié)果會怎樣?例:鍵盤輸入三行字符,統(tǒng)計大寫字母出現(xiàn)的次數(shù)#include<stdio.h>intmain(){chars[3][81],*p;inti,sum=0;for(i=0;i<=2;i++)gets(s[i]);for(i=0;i<=2;i++)for(p=s[i];*p!=0;p++)if(*p>=65&&*p<=90)sum++;printf(“%d\n”,sum);return0;}2023/2/51211.2.2
用指針變量訪問二維數(shù)組的下標(biāo)變量2023/2/513用指針變量訪問下標(biāo)變量的場合數(shù)組名作參數(shù)本節(jié)主要內(nèi)容1第三節(jié)用指針變量訪問下標(biāo)變量的場合2voidf(...){............}2023/2/514討論:在哪訪問下標(biāo)變量?在數(shù)組定義所在的函數(shù)中訪問可用數(shù)組名訪問可用指針變量訪問在其他函數(shù)中訪問僅使用,不修改
傳遞數(shù)組元素的地址(傳一個地址即可:f(a))修改數(shù)據(jù)傳值:無法修改傳遞地址(傳一個地址即可:f(a))11.3.1
用指針變量訪問下標(biāo)變量的場合此時,就需要用變量地址作實參,指針變量作形參,通過指針變量訪問下標(biāo)變量intmain(){
inta[10];......}傳遞整個數(shù)組:f(a);//傳遞每個數(shù)組元素的值:f(a[0],a[1],a[2]…a[9])2023/2/515示意圖:(以一維數(shù)組為例)
主調(diào)函數(shù)被調(diào)函數(shù)
intmain()sub(int*p){{inta[10]……sub(a);……}
}11.3.2
數(shù)組名作參數(shù)相當(dāng)于執(zhí)行:p=a;2023/2/516例:主函數(shù)定義數(shù)組inta[5]={3,5,2,8,6},編寫被調(diào)函數(shù)以計算所有數(shù)據(jù)之和(僅使用,不修改)intsum(int*p)//參數(shù)傳遞后,p指向?{inti,s=0;//此s并非主函數(shù)中的sfor(i=0;i<=4;i++)s+=*(p++);returns;}intmain(){inta[5]={3,5,2,8,6},s;s=sum(a);//實參a即&a[0]printf(“%d\n”,s);return0;}11.3.2
數(shù)組名作參數(shù)2023/2/517例:主函數(shù)定義數(shù)組inta[5]={3,5,2,8,6},編寫被調(diào)函數(shù)使數(shù)組中每個元素都變成原來的兩倍(修改數(shù)據(jù))voiddb(int*p)//參數(shù)傳遞后,p指向a[0]{inti;for(i=0;i<=4;i++)*p=*(p++)*2;}intmain(){inta[5]={3,5,2,8,6},i;db(a);//實參a,就是&a[0]for(i=0;i<=4;i++)printf(“%3d”,a[i]);return0;}11.3.2
數(shù)組名作參數(shù)2023/2/518上面兩個例子中,形參“int*p”都可聲明成
int
p[],兩者等價voiddb(intp[])//p還是個指針變量{inti;for(i=0;i<=4;i++)*p=*(p++)*2;//p[i]=p[i]*2;}intmain(){inta[5]={3,5,2,8,6},i;db(a);for(i=0;i<=4;i++)printf(“%3d”,a[i]);return0;}11.3.2
數(shù)組名作參數(shù)2023/2/519關(guān)于intp[]和int*p等價的驗證:intmain(){voidsub(int[]);inta[10]={1,3,5,2,7,9,6,8,0,4};printf(“%d,",sizeof(a));printf(“%p,",a);printf(“%p\n",&a);sub(a);printf("%p\n",a);return0;}voidsub(intx[]){printf("%d,",sizeof(x));printf("%p,",x);printf("%p,",&x);x++;printf("%p\n",x);}TC下的運行結(jié)果:20,FFCC,FFCC2,
FFCC,FFCA,FFCEFFCC11.3.2
數(shù)組名作參數(shù)2023/2/520例:主函數(shù)給inta[3][5]輸入數(shù)據(jù),被調(diào)函數(shù)找出最大數(shù)和最小數(shù),存入主函數(shù)定義的變量中,主函數(shù)輸出#include<stdio.h>voidsub(int*,int*,int*);intmain(){inta[3][5],max,min,i,j;for(i=0;i<=2;i++) for(j=0;j<=4;j++) scanf("%d",&a[i][j]);sub(a[0],&max,&min);
printf("%d,%d\n",max,min);return0;}11.3.2
數(shù)組名作參數(shù)2023/2/521voidsub(int*p,int*pmax,int*pmin){inti;*pmax=*pmin=*p;for(i=1;i<=14;i++){if(*pmax<p[i])*pmax=p[i];if(*pmin>p[i])*pmin=p[i];}}11.3.2
數(shù)組名作參數(shù)2023/2/522課外思考:下面程序的問題是什么?題目:二維數(shù)組存3人成績,求總平均分
#include<stdio.h>
floataverage(int*,int);
int
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《不良生活習(xí)慣》課件
- 2024年版特定股權(quán)轉(zhuǎn)讓與業(yè)績保障協(xié)議版B版
- 房本除名登記協(xié)議書
- 2024年新型數(shù)字媒體內(nèi)容制作與傳播采購合同3篇
- 2025年綏化貨車資格證考試題
- 《狼性臧其超作品》課件
- 2025年萊蕪駕??荚囏涍\從業(yè)資格證模擬考試
- 2025年聊城道路運輸從業(yè)人員從業(yè)資格考試
- 2025年防城港貨運從業(yè)資格證考試題庫答案
- 《初中作文結(jié)構(gòu)篇圖》課件
- GB/T 45090-2024塑料再生塑料的標(biāo)識和標(biāo)志
- 《工廠垃圾分類》課件
- 2025年1月“八省聯(lián)考”考前猜想卷歷史試題01 含解析
- 《小學(xué)科學(xué)實驗教學(xué)探究的國內(nèi)外文獻(xiàn)綜述》2300字
- 山東省淄博市2023-2024學(xué)年高二上學(xué)期期末教學(xué)質(zhì)量檢測試題 數(shù)學(xué) 含解析
- 教育部《中小學(xué)校園食品安全和膳食經(jīng)費管理工作指引》專題培訓(xùn)
- 2醫(yī)療器械企業(yè)稅務(wù)籌劃(2024年)
- 專題23 殖民地人民的反抗與資本主義制度的擴展(練習(xí))
- 2024至2030年中國無甲醛多層板數(shù)據(jù)監(jiān)測研究報告
- 11.20世界慢阻肺日認(rèn)識你的肺功能預(yù)防控制和消除慢阻肺課件
- 大學(xué)美育智慧樹知到期末考試答案章節(jié)答案2024年寧波大學(xué)
評論
0/150
提交評論