《返回指針值的函數(shù)-指針數(shù)組-指向指針的指針.ppt》由會員分享,可在線閱讀,更多相關《返回指針值的函數(shù)-指針數(shù)組-指向指針的指針.ppt(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第7講 指針,內(nèi)容: 返回指針值的函數(shù) 指針數(shù)組 指向指針的指針,返回指針值的函數(shù),函數(shù)的返回值可以是一個指針類型的數(shù)據(jù)(即地址),返回指針值函數(shù)的定義格式: 函數(shù)類型 * 函數(shù)名( 形參列表 ) 函數(shù)體; ,說明:定義一個返回指針值的函數(shù)與定義普通函數(shù)的格式基本 類似,只是在函數(shù)名前加 * , 表明該函數(shù)返回一個指針值,例: int * fun ( int a , int b ) 函數(shù)體 ; ,例3-4求某班成績的平均分, 最高分和最低分 要求用返回指針值的函數(shù)實現(xiàn),分析: 通過函數(shù)average的返回值得到保存平均分變量的地址, 進而得到平均分, 函數(shù)中將平均分變量定義成靜
2、態(tài)的, 這樣函數(shù)結(jié)束后該變量仍然存在。, float x=0, y=100, *p; printf(“input n:”); scanf(%d, ,例3-4 程序代碼,靜態(tài)局部變量,,float *average(int n, float *max, float *min) int i; float s, *aver, sum=0; static float aver1; aver= ,例3-5: 編寫一個alloc(n)函數(shù),用來在內(nèi)存區(qū)開辟n個字節(jié)的連續(xù)空間, 該函數(shù)的返回值是一個指針,指向新開辟的空間的起始地址,提示:先在內(nèi)存申請一個相當大的連續(xù)空間(如1000個字節(jié)), 然后在此區(qū)域內(nèi)
3、進行開辟空間的操作。 假設指針變量p原來指向未用空間的開頭, 調(diào)用alloc(n)函數(shù)后, 開辟了n個字節(jié)供程序使用, 而指針變量p的值應變成p+n, 同時將新的p值返回, 表示可以利用從此位置開始的存儲單元。 如果要開辟的空間太大, 超過了預設的空間, 則alloc(n)函數(shù)應返回空指針NULL, 表示開辟失敗。,buf0 buf1 : : buf20 : : buf999,p,,,,返回指針值的函數(shù),,例3-5 程序代碼 #include #include #define SIZE 1000 char bufSIZE ; char *p=buf ; char *allo
4、c( int n) char *begin ; if ( p+n <= buf+SIZE ) begin=p; p=p+n; return(begin); else return(NULL); ,void main( ) char *p1,*p2 ; p1=alloc(10); strcpy(p1,”123456789”); p2=alloc(5); strcpy(p2,”abcd”); printf(“buf=%pn”, buf); printf(“p1=%pn”, p1); printf(“p2=%pn”, p2); puts(p1); p
5、uts(p2); for(int i=0 ; i<15 ; i++) printf(“%c”, bufi); ,返回指針值的函數(shù),全局變量,輸出地址,,buf0 buf1 : : buf9 buf10 : buf14 buf15 : : buf999,buf+10,,buf,,,buf,,buf+10,,1 2 : 9 0,a : 0,10,buf+15,,,,,,,buf+10,5,,,char *alloc( int n) char *begin ; if (p+n <= buf+SIZE) begin=p; p=p+n; return(begin); el
6、se return(NULL); ,p1=alloc(10);,p2=alloc(5);,p是一個指針數(shù)組, 它有3個元素, 每個元素是一個整型指針變量, 可指向一個整型數(shù)據(jù),概念: 一個數(shù)組的元素均為指針類型的數(shù)據(jù), 則該數(shù)組稱為指針數(shù)組,即:指針數(shù)組的每一個元素都是一個指針變量,定義格式: 類型名 *數(shù)組名數(shù)組長度;,int *p3;,int x, y, a4; p0=,,,,,定義一個4個元素的字符指針數(shù)組p,其中每個數(shù)組元素是一個字符指針,可以指向一個字符串,指針數(shù)組,例2-4: 編程將書名按字母順序排序后輸出,方法1: 用二維字符數(shù)組編程實現(xiàn),思考: 二維字符數(shù)組定義成多大
7、合適? 采用什么方法進行排序? 字符串怎樣比較和交換?, 第一維的長度取決于有幾本書 第二維的長度由最長的書名決定, 可使用冒泡排序或選擇排序, 字符串的比較和交換應使用相應的字符串函數(shù),,#include #include #define MAXLEN 7 #define N 4 void main( ) int i, j; char tempMAXLEN; char nameNMAXLEN=Pascal,VC,Basic,Java; printf(before sorted:n); for(i=0; i0) strcpy(temp, namei); strcpy(namei, n
8、amej); strcpy(namej, temp); printf(nafter sorted:n); for(i=0; i
9、c, Java; printf(nBefore sorted:n); for(i=0; i0) temp=pi; pi=pj; pj=temp; printf(nAfter sorted:n); for(i=0; i
10、; p0=p2; p2=temp;,2100,p0 p1 p2 p3,2110,2100,i=0, j=3 BJ,i=1, j=2 VP temp=p1; p1=p2; p2=temp;,2107,2100,2107,i=1, j=3 PJ temp=p1; p1=p3; p3=temp;,i=2, j=3 VP temp=p2; p2=p3; p3=temp;,2100,2116,2100,2107,2100,2107,指向指針的指針,int x, *q,**t; x=36; q=,2010,,,2026,思考: q=45; *q=45; *t=56; **t=56;,對,錯,因為q是指針變
11、量,賦值號右側(cè)必須是地址,錯,因為t是二級指針變量,*t等價于q,對,指向指針的指針,char *p4=Pascal, VC, Basic, Java; char **q; q=p; for( ;q