




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、n指針指針指針的概念指針的概念 143 3 6 7 8 15 16 A公司公司B公司公司C公司公司一排平房一排平房 叫地址叫地址 一排平房一排平房 1000 int a;float b;內(nèi)存管理內(nèi)存管理 1001 2002 2003 2000 2001 a的地址的地址b的地址的地址概念概念 n變量變量a a的地址記作的地址記作&a &a n指針變量指針變量專門存放另一變量的地址專門存放另一變量的地址n如果如果p是指針類型變量,而且是指針類型變量,而且p中存放了變中存放了變量量x的地址,則稱的地址,則稱常畫成如圖所示常畫成如圖所示形式。形式。px p指向指向x&x指針變量指針變量n指針即變量的地
2、址指針即變量的地址intint x; x;& &取地址運(yùn)算符取地址運(yùn)算符n指針變量:用來存放指針的指針變量:用來存放指針的變量變量intint * *p p 定義了一個指針變量,定義了一個指針變量,只能存放整型變量的地址只能存放整型變量的地址 * *表示指針類型表示指針類型p=&xp=&x;把;把x x的地址存在的地址存在p p變量中變量中y=y=* *p; p; * *p p表示表示p p指向的變量的值指向的變量的值 * *是取地址內(nèi)容運(yùn)算符是取地址內(nèi)容運(yùn)算符 注意與定義指針變量的注意與定義指針變量的* * 區(qū)別區(qū)別002002003003&X&Xp px x5 5&X&X【實例】編寫程序,
3、實現(xiàn)以下每一步的操作。【實例】編寫程序,實現(xiàn)以下每一步的操作。 (1)定義整型變量)定義整型變量iX。(2)定義兩個整型指針類型變量)定義兩個整型指針類型變量iP和和iQ。(3)使)使iP指向變量指向變量iX。(4)使)使iQ也指向變量也指向變量iX。(5)通過)通過iP給給iX存儲單元賦存儲單元賦10。(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值。中的值。 【實例】編寫程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦颍瑢崿F(xiàn)以下每一步的操作。 (1) int iX=0; (2)定義兩個整型指針類型變量)定義兩個整型指針類型變量iP和和iQ。(3)使)使
4、iP指向變量指向變量iX。(4)使)使iQ也指向變量也指向變量iX。(5)通過)通過iP給給iX存儲單元賦存儲單元賦10。(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值。中的值。 iXiX【實例】編寫程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦颍瑢崿F(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3)使)使iP指向變量指向變量iX。(4)使)使iQ也指向變量也指向變量iX。(5)通過)通過iP給給iX存儲單元賦存儲單元賦10。(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值
5、。中的值。 int 和和 * 是整體,是整體, int * 表示整型指針表示整型指針類型類型iPiQ(1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4)使)使iQ也指向變量也指向變量iX。(5)通過)通過iP給給iX存儲單元賦存儲單元賦10。(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值。中的值。 iXiPiQ【實例】編寫程序,實現(xiàn)以下每一步的操作。【實例】編寫程序,實現(xiàn)以下每一步的操作。 取地址運(yùn)算符取地址運(yùn)算符&iX無需知道具體地址值,無需知道具體地址值,用用“&變量名變量名”表示即表示即可可【實例】編寫程
6、序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦颍瑢崿F(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5)通過)通過iP給給iX存儲單元賦存儲單元賦10。(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值。中的值。 iXiPiQ&iX&iX使使iQ指向變量指向變量iX,等價于等價于 iQ=iP; 【實例】編寫程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦?,實現(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&
7、iX; (5) *iP=10;(6)通過)通過iQ對對iX的值增加的值增加5。(7)通過)通過iX,輸出,輸出iX中的值。中的值。 與與iX=10; 完完全等價全等價iXiPiQ&iX&iX當(dāng)當(dāng)iP指向指向iX時,時,iX與與*iP代表同一個代表同一個存儲單元存儲單元【實例】編寫程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦颍瑢崿F(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7)通過)通過iX,輸出,輸出iX中的值。中的值。 iXiPiQ&iX&iX【實例】編寫
8、程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦?,實現(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7)通過)通過iX,輸出,輸出iX中的值。中的值。 iXiPiQ&iX&iX【實例】編寫程序,實現(xiàn)以下每一步的操作?!緦嵗烤帉懗绦颍瑢崿F(xiàn)以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7) printf(iX=%dn,iX); iX
9、iPiQ&iX&iX指針的應(yīng)用實例指針的應(yīng)用實例 【實例】有【實例】有A、B兩種衣服,它們的單價分別兩種衣服,它們的單價分別是是480元和元和350元。由于衣服過時,將元。由于衣服過時,將A衣衣服按七五折、服按七五折、B衣服按八折出售,計算兩種衣服按八折出售,計算兩種衣服實際單價總和與實際單價的差價。衣服實際單價總和與實際單價的差價。146return語句最多只能返回語句最多只能返回一個值,調(diào)用一個函數(shù)一個值,調(diào)用一個函數(shù)無法返回兩個計算結(jié)果無法返回兩個計算結(jié)果?應(yīng)使用傳遞變量地址的方法應(yīng)使用傳遞變量地址的方法程序代碼:程序代碼: #include void price(float,float
10、,float *,float *); main() float fA=480,fB=350,fS=0.0,fT=0.0; price(fA,fB,&fS,&fT); printf(fA=%.2f,fB=%.2fn,fA,fB); printf(fS=%.2f,fT=%.2fn,fS,fT); 用函數(shù)實現(xiàn)計算功能函數(shù)定義在調(diào)用之后注明函數(shù)原型程序代碼:程序代碼: void price(float fA,float fB,float *fX,float *fY) fA=fA*0.75; fB=fB*0.8; *fX=fA+fB; *fY=fA-fB; 運(yùn)行結(jié)果:運(yùn)行結(jié)果:fA=480.00,fB=
11、350.00fS=640.00,fT=80.00 形參形參fA的值被改變,但不會影響主函數(shù)中的的值被改變,但不會影響主函數(shù)中的fA形參形參fB的值被改變,但不會影響主函數(shù)中的的值被改變,但不會影響主函數(shù)中的fB*fX相當(dāng)于主函數(shù)中的相當(dāng)于主函數(shù)中的fS*fY相當(dāng)于主函數(shù)中的相當(dāng)于主函數(shù)中的fT程序說明:程序說明:(1)price(fA,fB,&fS,&fT); 函數(shù)調(diào)用開始函數(shù)調(diào)用開始時實參與形參之間的關(guān)系如圖所示。時實參與形參之間的關(guān)系如圖所示。0fS0fTfAfBfXfY調(diào)用開始時調(diào)用開始時fA480fB350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)480350fAfB00fSfT480350fA
12、fBfXfY調(diào)用開始時調(diào)用開始時480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)程序說明:程序說明:(1)price(fA,fB,&fS,&fT); 函數(shù)調(diào)用開始函數(shù)調(diào)用開始時實參與形參之間的關(guān)系如圖所示。時實參與形參之間的關(guān)系如圖所示。fAfB00fSfT480350fAfBfXfY調(diào)用開始時調(diào)用開始時480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)fAfB00fSfT480350fAfBfXfY調(diào)用開始時調(diào)用開始時480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)程序說明:程序說明:(1)price(fA,fB,&fS,&fT); 函數(shù)調(diào)用開始函數(shù)調(diào)用開始時實參與形參之間的關(guān)系如圖所示。時實參與形參之間
13、的關(guān)系如圖所示。fAfBfSfT360280fAfBfXfY調(diào)用期間調(diào)用期間480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)程序說明:程序說明:(1)price(fA,fB,&fS,&fT); 函數(shù)調(diào)用開始函數(shù)調(diào)用開始時實參與形參之間的關(guān)系如圖所示。時實參與形參之間的關(guān)系如圖所示。fAfB00fSfT480350fAfBfXfY調(diào)用開始時調(diào)用開始時480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)fAfB64080fSfT360280fAfB64080fXfY調(diào)用期間調(diào)用期間480350被被調(diào)調(diào)函函數(shù)數(shù)主主調(diào)調(diào)函函數(shù)數(shù)指針與數(shù)組元素的關(guān)系指針與數(shù)組元素的關(guān)系void main()void main()
14、int int s5=10,20,30,40,50; s5=10,20,30,40,50; int int * *p,p,* *p1;p1; p=s; p=s; p1=s; p1=s; printf(“%d printf(“%d %d”, %d”,* *p,p10);p,p10); p+; p+; printf(“%d %d %d printf(“%d %d %d”,”,* *p,s1,p11);p,s1,p11); 10102020303040405050S S數(shù)組名為第一個元素的地址數(shù)組名為第一個元素的地址S Sp pp pS0S0S1S1指針作為函數(shù)參數(shù)與數(shù)組的關(guān)系指針作為函數(shù)參數(shù)與數(shù)組
15、的關(guān)系void test(intvoid test(int * *p)/p)/對函數(shù)功能進(jìn)行定義,還沒執(zhí)行對函數(shù)功能進(jìn)行定義,還沒執(zhí)行 * *(p+1)=(p+1)=* *p+10;p+10; void main()void main() int int s5=10,20,30,40,50; s5=10,20,30,40,50; int int * *p,p,* *p1;p1; p=s; p=s; test(p test(p);/);/執(zhí)行函數(shù)執(zhí)行函數(shù) printf(“%dprintf(“%d ”,p1); ”,p1); 指針作為函數(shù)形參的精髓指針作為函數(shù)形參的精髓n不通過指針作為形參,形參和
16、實參是獨(dú)立不通過指針作為形參,形參和實參是獨(dú)立的的n通過指針作為形參,在函數(shù)中形參中訪問通過指針作為形參,在函數(shù)中形參中訪問實參的內(nèi)容,把形參和實參聯(lián)系起來了實參的內(nèi)容,把形參和實參聯(lián)系起來了n與指針有關(guān)的題型與指針有關(guān)的題型字符替換字符替換 程序程序PROG1.CPROG1.C的功能是的功能是: : 把把 s s 字符串中的所有字母改寫成字符串中的所有字母改寫成該字母的下一個字母該字母的下一個字母, ,字母字母z z改寫成字母改寫成字母a,a,字母字母Z Z改寫成字改寫成字母母A, A, 其它字符不做改變。其它字符不做改變。 請考生編寫函數(shù)請考生編寫函數(shù)chg(charchg(char *
17、*s)s)實現(xiàn)程序要求實現(xiàn)程序要求, , 最后調(diào)用最后調(diào)用函數(shù)函數(shù)readwriteDATreadwriteDAT()()把結(jié)果輸出到文件把結(jié)果輸出到文件out.datout.dat中。中。 例如:例如:s s 字符串中原有的內(nèi)容為:字符串中原有的內(nèi)容為:Mn.123ZxyMn.123Zxy,則調(diào)用,則調(diào)用該函數(shù)后,結(jié)果為:該函數(shù)后,結(jié)果為:No.123AyzNo.123Ayz。 注意注意: : 部分源程序存在文件部分源程序存在文件PROG1.CPROG1.C文件中。文件中。 請勿改動數(shù)據(jù)文件請勿改動數(shù)據(jù)文件in.datin.dat中的任何數(shù)據(jù)、主函數(shù)中的任何數(shù)據(jù)、主函數(shù)main()main(
18、)和輸出數(shù)據(jù)函數(shù)和輸出數(shù)據(jù)函數(shù)readwriteDATreadwriteDAT()()的內(nèi)容。(的內(nèi)容。(1616套)套)#include string.h#include #include stdio.h#include #include ctype.h#include #define N 81#define N 81void readwriteDATvoid readwriteDAT();();void chg(charvoid chg(char * *s)s) main( )main( ) char aN char aN; printf(Enter a string : ); gets(
19、a printf(Enter a string : ); gets(a);); printf(The original string is : ); printf(The original string is : ); puts(aputs(a);); chg(a chg(a);); printf(The printf(The string after modified : ); string after modified : ); puts (a); puts (a); readwriteDAT readwriteDAT() ;() ; void readwriteDAT() int i ;
20、 char aN ; FILE *rf, *wf ; rf = fopen(c:testin.dat, r) ; wf = fopen(c:testout.dat, w) ; for(i = 0 ; i 10 ; i+) fscanf(rf, %s, a) ; chg(a) ; fprintf(wf, %sn, a) ; fclose(rf) ; fclose(wf) ;編程點(diǎn)撥編程點(diǎn)撥a3ZAzf0a數(shù)組a調(diào)用chg()函數(shù)前s調(diào)用chg()函數(shù)期間s形參指針指向?qū)崊數(shù)組Chg函數(shù)只需對s進(jìn)行操作實現(xiàn)功能:對數(shù)組中的每個元素都要進(jìn)行判斷和操作 所以可以通過循環(huán)實現(xiàn) 問題:循環(huán)結(jié)束條件ssA
21、sBsasgs停止轉(zhuǎn)換循環(huán)變量 swhile (*s!=0) . s+;void chg(charvoid chg(char * *s)s) char ch char ch ; ; while( while(* *s) s) 循環(huán)結(jié)束條件:當(dāng)*s不為0時循環(huán)在循環(huán)體內(nèi)判斷如果 *s是為字母并且不為 z和Z *s=*s+1否則 如果 *s=z *s=a 如果 *s=Z *s=A if(isalpha(*s) & *s != z & *s!= Z) *s= *s+ 1 ; else if(*s= z) *s = a ; else if(*s = Z) *s = A ;s+ ; 循環(huán)要結(jié)束 s+請編
22、寫函數(shù)請編寫函數(shù)void countValue(int void countValue(int * *a,inta,int * *n)n),它的功能是,它的功能是: : 求出求出1 1到到10001000之內(nèi)能被之內(nèi)能被7 7或或1111整除但不能同時被整除但不能同時被7 7和和1111整除的所有整整除的所有整數(shù)數(shù), ,其結(jié)果按從小到大的順序放在數(shù)組其結(jié)果按從小到大的順序放在數(shù)組a a中中, ,并通過形式參數(shù)并通過形式參數(shù)n n傳遞這些數(shù)的個數(shù)。傳遞這些數(shù)的個數(shù)。 注意注意: : 部分源程序存在文件部分源程序存在文件PROG1.CPROG1.C文件文件中。中。 請勿改動主函數(shù)請勿改動主函數(shù)ma
23、in()main()和輸入輸出數(shù)據(jù)和輸入輸出數(shù)據(jù)函數(shù)函數(shù)writeDATwriteDAT()()的內(nèi)容。(的內(nèi)容。(0303套)套)#include conio.h#include #include stdio.h#include void writeDATvoid writeDAT() ;() ;void countValue(int void countValue(int * *a, inta, int * *n)n) main( )main( ) int int aa1000, n, k ; aa1000, n, k ; countValue( aa countValue( aa, &n
24、 ) ;, &n ) ; for( k = 0 ; k n ; k+ ) for( k = 0 ; k n ; k+ ) if(k + 1) % 10 = 0) if(k + 1) % 10 = 0) printf(%5dn, aakprintf(%5dn, aak) ;) ; else printf(%5d, aak else printf(%5d, aak) ;) ; writeDAT writeDAT() ;() ; void writeDAT() int aa1000, n, k ; FILE *fp ; fp = fopen(C:WEXAM35990001out.dat, w) ;
25、countValue(aa, &n) ; for ( k = 0 ; k n ; k+ ) if(k + 1) % 10 = 0) fprintf(fp, %5dn, aak) ; else fprintf(fp, %5d, aak) ; fclose(fp) ;形參a指向?qū)崊a數(shù)組形參n指向?qū)崊代碼void countValue(int void countValue(int * *a, inta, int * *n)n) for(i = 7 ; i = 1000 ; i+) if(i % 7) = 0 | (i % 11) = 0) & (i % 77 != 0) a(*n)+ = i
26、 ;/為什么加為什么加()int i ;形參n記錄滿足條件的個數(shù) 需賦初值*n = 0 ;/為什么不是為什么不是n=0;7-1000中個每個數(shù)都進(jìn)行判斷所以需要循環(huán)每個數(shù)被每個數(shù)被7或或11整除但整除但不能同時被不能同時被7和和11整除整除滿足條件滿足條件 保存該數(shù)據(jù)到保存該數(shù)據(jù)到a數(shù)組數(shù)組中,同時中,同時*n自增自增n下列程序的功能是下列程序的功能是: :把把S S字符串中的所有字字符串中的所有字符左移一個位置符左移一個位置, ,串中的第一個字符移到最串中的第一個字符移到最后后. .請編寫函數(shù)請編寫函數(shù)CHG(charCHG(char * *S)S)實現(xiàn)程序要求實現(xiàn)程序要求, ,最后調(diào)用函數(shù)最后調(diào)用函數(shù)READWRITEDAT()READWRITEDAT()把結(jié)果輸出把結(jié)果輸出到到OUT.DATOUT.DAT文件中文件中. .例如例如:S:S字符串中原有內(nèi)容為字符串中原有內(nèi)容為:MN.123XYZ,:MN.123XYZ,則則調(diào)用函數(shù)后調(diào)用函數(shù)后, ,結(jié)果為結(jié)果為:N.123XYZM.:N.123XYZM.請勿改動主函數(shù)請勿改動主函數(shù)main()main()和輸入輸出函數(shù)和輸入輸出函數(shù)readwriteDATreadwriteDAT()()的內(nèi)容。的內(nèi)容。試題程序:試題程序: #include string.h#include #include stdlib.h#
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物學(xué)科實驗操作經(jīng)驗交流計劃
- 畫出童年小班藝術(shù)表現(xiàn)計劃
- 優(yōu)化流程的年度工作框架計劃
- 班級心理素質(zhì)提升活動的案例分享計劃
- 2025年中國新型建材行業(yè)市場競爭格局及投資方向研究報告(智研咨詢)
- 2025年鐵紅項目建議書
- 2025年系列自動遙測氣象站項目合作計劃書
- 汽車零件互換性規(guī)則設(shè)定
- 構(gòu)建穩(wěn)定可靠的數(shù)據(jù)庫同步體系
- 三國演義的英雄氣概讀后感
- 發(fā)展?jié)h語 初級讀寫一 第二課 謝謝你
- 部編版六年級語文下冊第一單元大單元教學(xué)任務(wù)單
- 人教版小學(xué)語文1-6年級背誦內(nèi)容完整版
- 2023徐金桂“徐徐道來”(行政法知識點(diǎn))版
- 《事故汽車常用零部件修復(fù)與更換判別規(guī)范》
- 2024-2030年中國酒類流通行業(yè)發(fā)展動態(tài)及投資盈利預(yù)測研究報告
- 物業(yè)管理如何實現(xiàn)降本增效
- DL-T825-2021電能計量裝置安裝接線規(guī)則
- 信息科技重大版 七年級下冊 互聯(lián)網(wǎng)應(yīng)用與創(chuàng)新 第一單元單元教學(xué)設(shè)計 互聯(lián)網(wǎng)創(chuàng)新應(yīng)用
- 2024年興業(yè)銀行股份有限公司校園招聘考試試題及參考答案
- 2024智慧城市城市交通基礎(chǔ)設(shè)施智能監(jiān)測技術(shù)要求
評論
0/150
提交評論