c語言程序設(shè)計-第十章指針.ppt
《c語言程序設(shè)計-第十章指針.ppt》由會員分享,可在線閱讀,更多相關(guān)《c語言程序設(shè)計-第十章指針.ppt(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院馮瀟fengxiao,指針及其應(yīng)用,2020/4/25,主要內(nèi)容,指針的概念;難點:對指針數(shù)據(jù)類型的理解用指針做函數(shù)參數(shù);指針與一維數(shù)組數(shù)組名作為函數(shù)參數(shù)一維數(shù)組與一維數(shù)組元素指針的區(qū)別插入和刪除數(shù)組元素,2020/4/25,重點、難點,對于指針概念的理解對于地址、直接尋址、間接尋址的理解對于指針作為函數(shù)參數(shù)的理解對于指針和數(shù)組關(guān)系的理解利用指針解決字符串問題,2020/4/25,變量再探,什么是變量?程序運行過程中其值會發(fā)生改變的量變量有3個特點;變量要占用一定的存儲空間變量有名字程序運行過程中變量的值可能發(fā)生改變變量的實質(zhì)在高級語言中,變量是對存儲單元和內(nèi)存地址的映射通過使用變量名定位存儲單元的尋址方式叫直接尋址,2020/4/25,計算機內(nèi)的存儲部件,所有指令和數(shù)據(jù)都保存在內(nèi)存里速度快,但是掉電即失可以隨機訪問內(nèi)存中的每個字節(jié)都有唯一的一個地址地址按字節(jié)編號,按類型分配空間只要指明要訪問的內(nèi)存單元的地址,就可以立即訪問到該單元地址是一個無符號整數(shù),其字長一般與主機相同,內(nèi)存(RandomAccessMemory)地址(Address),2020/4/25,尋址方式,直接(尋址)訪問通過變量地址直接存取變量內(nèi)容間接(尋址)訪問通過指針變量來間接存取它所指向的變量,2020/4/25,什么是指針,專門存放地址數(shù)據(jù)的變量即為指針變量指針也是一種數(shù)據(jù)類型,也有與之相應(yīng)的運算法則指針是不是地址?地址是一個無符號整數(shù),其字長一般與主機相同指針是一個變量,完全符合變量的3個特點定義指針類型*指針變量名;“*”為指針類型說明符,2020/4/25,p=,2020,20,2020/4/25,inti,*p;p=,int*p;float*q;p=q;,inti;float*p;p=,int*p;p=100;,判斷是真?是假?,指針變量只存放地址!,一個指針變量不能指向與其類型不同的變量!,我是真的,你猜對了嗎?,應(yīng)在類型相同的指針變量之間賦值,2020/4/25,指針運算,算術(shù)運算int*p,a10;p=a;p+;/*p的值增加多少?*/指針的加減運算是以其指向的類型的字節(jié)長度為單位的,6000600160026003600460056006,2020/4/25,指針運算,int*p,*q,a10;p=a;q=指針運算不能亂算一般只進行指針和整數(shù)的加減運算,同類型指針之間的減法運算其它運算,比如乘法、除法、浮點運算、指針之間的加法等,并無意義,所以也不支持,2020/4/25,指針變量與其它類型變量的對比,共性在內(nèi)存中占據(jù)一定大小的存儲單元先定義,后使用特殊性它的內(nèi)容只能是地址,而不能是數(shù)據(jù),TC下2B,VC下4B必須初始化后才能使用,否則指向不確定的存儲單元,對該空間進行訪問,將可能造成危險可參與的運算:加、減一個整數(shù),自增、自減、關(guān)系、賦值只能指向同一基類型的變量,2020/4/25,為什么要引入指針?,鐵桿C/C+程序員最摯愛的武器:指針C/C+的高效、高能主要來自于指針很多不可能的任務(wù)由指針完成指針的作用:為函數(shù)提供修改變量值的手段為C的動態(tài)內(nèi)存分配系統(tǒng)提供支持為動態(tài)數(shù)據(jù)結(jié)構(gòu)(如例鏈表、隊列、二叉樹等)提供支持可以改善某些子程序的效率,2020/4/25,交換兩個數(shù)的值,voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;,voidmain()inta,b;a=5;b=10;swap(a,b);printf(a=%d,b=%d,a,b);,2020/4/25,回顧,5,10,voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;,voidmain()inta,b;a=5;b=10;swap(a,b);printf(a=%d,b=%d,a,b);,2020/4/25,用指針作為函數(shù)參數(shù),2020/4/25,改進:,voidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;,voidmain()inta,b;a=15;b=8;swap(,2020/4/25,swap函數(shù)的幾種錯誤形式(1/3),參數(shù)單向傳遞voidSwap(intx,inty)inttemp;temp=x;/*x,y為內(nèi)部變量*/x=y;y=temp;,2020/4/25,swap函數(shù)的幾種錯誤形式(1/2),參數(shù)單向傳遞voidSwap(int*p1,int*p2)int*p;p=p1;/*p1,p2為內(nèi)部變量*/p1=p2;p2=p;,2020/4/25,swap函數(shù)的幾種錯誤形式(2/2),指針p沒有確切地址voidSwap(int*p1,int*p2)int*p;/*指針p未初始化*/*p=*p1;*p1=*p2;*p2=*p;,2020/4/25,幾點說明,當(dāng)指針作為函數(shù)的形參時,被調(diào)函數(shù)可以通過指針間接修改定義于主調(diào)函數(shù)中的數(shù)據(jù)。在實際編程中,我們經(jīng)常利用到這一特性當(dāng)指針作為函數(shù)的形式參數(shù)時,實參可以是地址、指針,也可以是數(shù)組名同樣地,數(shù)組名也可以作為指針來充當(dāng)函數(shù)的形式參數(shù),2020/4/25,voidsort(doublea,intn)inti,j;doubletemp;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,2020/4/25,在一個班級中找出最高分及其學(xué)號,voidFindMax(floatscore,longnum,intn,float*pMaxScore,long*pMaxNum)inti;*pMaxScore=score0;*pMaxNum=num0;for(i=1;i*pMaxScore)*pMaxScore=scorei;*pMaxNum=numi;,指針參數(shù)指定了存放這兩個值的地址,2020/4/25,指針與數(shù)組,數(shù)組名就是一個指針只是不能修改這個指針的指向可以定義函數(shù)的參數(shù)為數(shù)組指針也可當(dāng)作數(shù)組名使用int*p,a10;p=a;數(shù)組元素的幾種等價引用形式ai*(a+i)pi*(p+i),60006001600260036004600560066007,a,a+1,a+2,60006001600260036004600560066007,a,p+,p+,2020/4/25,輸入輸出數(shù)組的全部元素,main()inta10;inti;for(i=0;i10;i+)scanf(%d,方法1:下標(biāo)法,main()inta10;int*p;for(p=a;p(a+10);p+)scanf(%d,p);for(p=a;p(a+10);p+)printf(%d,*p);,方法2:指針法,2020/4/25,字符串與字符數(shù)組、字符指針,C語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理字符串一串以0結(jié)尾的字符字符數(shù)組每個元素都是字符類型的數(shù)組charstring100;字符指針指向字符類型的指針char*p;數(shù)組和指針可以等同看待,上面三者本質(zhì)上是一回事,2020/4/25,字符指針變量與字符數(shù)組的區(qū)別,定義方法不同charstr10;char*ptr;賦值方法不同charstr10;ptr=”china”;/*錯誤*/strcpy(str,”china”);/*正確*/char*ptr;ptr=”china”;字符指針是變量,而數(shù)組名是地址常量,2020/4/25,使用字符指針的注意事項,字符指針變量必須有明確的指向,否則使用是危險的例如,輸入字符串時char*a;scanf(%s,a);/*錯誤*/應(yīng)為:char*a;charstr10;a=str;scanf(%s,a);/*正確*/,2020/4/25,例7.5:字符串拷貝用字符數(shù)組編程,voidMyStrcpy(chardstStr,charsrcStr)inti=0;while(srcStri!=0)dstStri=srcStri;i+;dstStri=0;,2020/4/25,voidMyStrcpy(char*dstStr,constchar*srcStr)while(*srcStr!=0)*dstStr=*srcStr;srcStr+;dstStr+;*dstStr=0;,當(dāng)只允許函數(shù)訪問地址內(nèi)容,不允許修改時,可以把函數(shù)的指針參數(shù)定義為const,例7.5:字符串拷貝用字符指針編程,2020/4/25,習(xí)題6.13:編程實現(xiàn)strcat(),#includevoidMyStrCat(char*to,char*from)while(*(+to);while(*(to+)=*(from+);voidmain()charstr1100,str250;gets(str1);gets(str2);MyStrCat(str1,str2);puts(str1);,2020/4/25,作業(yè),習(xí)題7.8求M行M列整數(shù)方陣兩對角線上各元素之和,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言程序設(shè)計 第十 指針
鏈接地址:http://www.szxfmmzy.com/p-11495396.html