資源描述:
《指針&結(jié)構(gòu)體指針.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在PPT專區(qū)-天天文庫。
1、指針及結(jié)構(gòu)體指針基本概念指針使用數(shù)組與指針函數(shù)指針指針型函數(shù)返回值指針數(shù)組結(jié)構(gòu)體指針及其使用鏈表基本概念內(nèi)存地址系統(tǒng)內(nèi)存區(qū)域中存儲單元的組織序號以字節(jié)(byte)為最小單位地址連續(xù)變量變量名是系統(tǒng)中對象的命名系統(tǒng)對象保存在內(nèi)存單元組變量值是存儲單元組的內(nèi)容*變量名是內(nèi)存單元組起始地址的命名charchintishortmint*pa..0x3df800040x3df800080x3df8000a0x3df8000c...0x3df800ac........1024205'A'0x3df800ac865基
2、本概念(續(xù)一)指針是一個常量值是內(nèi)存中某個地址??!通過指針可以訪問它所指向的內(nèi)存區(qū)域變量地址:變量所占存儲單元的起始地址=>指針指針變量:內(nèi)容或變量值是指針的變量類型限定符=>擴展類型存取方式---訪問(R/W)變量或?qū)ο笾苯樱焊鶕?jù)變量名直接訪問內(nèi)容間接:通過指針訪問它所指向的對象指針使用(續(xù)一)引用指針主要運算符&:取址運算符獲取變量的地址*:取值運算符(或間接訪問/遞引用運算符)訪問指針所指向的對象或變量例2、通過指針訪問整型變量intmain(){inta;int*pa;pa=&a;//papoi
3、ntstoaprintf("%d,%d",a,*pa);//???,???a=20;printf("%d,%d",a,*pa);//20,20scanf("%d",&a);//15printf("%d,%d",a,*pa);//15,15return0;}0x8d30400420paa0x8d304004150x8d304004???指針使用(續(xù)二)特點&、*同級但高于算術(shù)運算符自右向左結(jié)合特殊形式的運算例3inta,*pa=&a;&*pa;//==??>*&a;//==??>允許++/--、+
4、/-按基類型增大或減少,變化?為一個或多個基本類型所需空間的大小例4(*pa)++vs.*pa++pa+=2;pa=pa-1;0x8d304004???paa0x8d304008???paa'指針使用(續(xù)三)例5,假定每個整數(shù)占用4個字節(jié)inta;charch;int*pa=&a;//假定&a==0xc48d4024char*ps=&ch;//假定&ch==0xc48d4012pa++;//pa==0xc48d4028[+sizeof(int)]ps++;//ps==0xc48d4013[+sizeof
5、(char)]數(shù)組與指針二者關(guān)系數(shù)組的指針---數(shù)組名作為指針是數(shù)組的起始地址數(shù)組是內(nèi)存連續(xù)區(qū)域,有起始/終止地址數(shù)組元素占用相同空間數(shù)組起始地址等于數(shù)組第一個元素地址數(shù)組元素指針變量---訪問數(shù)組指向數(shù)組元素的同型指針變量數(shù)組元素有地址且連續(xù)可以遍歷數(shù)組數(shù)組與指針(續(xù)一)基本用法以整型數(shù)組inta[5]={1,20,3,19,2}為例指針指向某個元素int*pa=&a[0];//第1個元素pa=&a[0];//或pa=a通過指針訪問數(shù)組元素inti;讀:i=*pa;寫:*pa=7;//<=>a[0]=
6、7訪問pa指向元素后面的第i個元素---(pa+i)*(pa+2)=5;//<=>a[2]=5pa+=i;//pa指向它后面第i個元素指向它前一個/后一個元素pa++/pa--用數(shù)組名訪問元素*(a+4)=4;//<=>a[4]=41-->7203-->5192-->4a[0]a[4]pa&a[0]函數(shù)指針函數(shù)是一個可執(zhí)行例程的入口點地址函數(shù)名是一個地址常量可以作為函數(shù)參數(shù)函數(shù)指針:指向函數(shù)的指針指針變量的值是函數(shù)入口地址訪問函數(shù)指針指向的對象=>函數(shù)調(diào)用用法定義語法(*pfn
7、)([])pfn必須包含在括號內(nèi)函數(shù)指針(續(xù)一)使用pfn作為指針變量存在例1、使用函數(shù)指針求最大值p261intmain(){intmax(inta,intb);int(*pmax)(int,int);intx,y,z;pmax=max;printf("inputtwonumbers:");scanf("%d%d",&x,&y);//1033z=(*pmax)(x,y);printf("maxmum=%d",z);//maxmum=33return0;}intmax(int
8、x,inty){return(x>y?x:y);}....pmax...max函數(shù)指針(續(xù)二)*函數(shù)指針是擴展類型,可作為返回值函數(shù)指針作為參數(shù)例2、獲得數(shù)組中最大值元素intmax2(inta,intb);intmaxX(int(*pf)(int,int),intA[],intn){inti,max;max=A[0];for(i=0;i