資源描述:
《返回指針值的函數(shù)-指針數(shù)組-指向指針的指針》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、第7講指針內容:返回指針值的函數(shù)指針數(shù)組指向指針的指針返回指針值的函數(shù)函數(shù)的返回值可以是一個指針類型的數(shù)據(即地址)返回指針值函數(shù)的定義格式:函數(shù)類型*函數(shù)名(形參列表){函數(shù)體;}說明:定義一個返回指針值的函數(shù)與定義普通函數(shù)的格式基本類似,只是在函數(shù)名前加*,表明該函數(shù)返回一個指針值例:int*fun(inta,intb){函數(shù)體;}例3-4求某班成績的平均分,最高分和最低分要求用返回指針值的函數(shù)實現(xiàn)分析:通過函數(shù)average的返回值得到保存平均分變量的地址,進而得到平均分,函數(shù)中將平均分變量定義成靜態(tài)的
2、,這樣函數(shù)結束后該變量仍然存在。mainpaverageaver1靜態(tài)aver&aver1&aver181返回指針值的函數(shù)voidmain(){intn;floatx=0,y=100,*p;printf(“inputn:”);scanf("%d",&n);p=average(n,&x,&y);printf("ave=%6.2f,",*p);printf("max=%6.2f,",x);printf("min=%6.2f",y);}例3-4程序代碼靜態(tài)局部變量float*average(intn,float
3、*max,float*min){inti;floats,*aver,sum=0;staticfloataver1;aver=&aver1;for(i=1;i<=n;i++){printf(“inputs:");scanf("%f",&s);if(s>*max)*max=s;if(s<*min)*min=s;sum=sum+s;}aver1=sum/n;return(aver);}例3-5:編寫一個alloc(n)函數(shù),用來在內存區(qū)開辟n個字節(jié)的連續(xù)空間,該函數(shù)的返回值是一個指針,指向新開辟的空間的起始地址提示
4、:先在內存申請一個相當大的連續(xù)空間(如1000個字節(jié)),然后在此區(qū)域內進行開辟空間的操作。假設指針變量p原來指向未用空間的開頭,調用alloc(n)函數(shù)后,開辟了n個字節(jié)供程序使用,而指針變量p的值應變成p+n,同時將新的p值返回,表示可以利用從此位置開始的存儲單元。如果要開辟的空間太大,超過了預設的空間,則alloc(n)函數(shù)應返回空指針NULL,表示開辟失敗。buf[0]buf[1]::buf[20]::buf[999]p返回指針值的函數(shù)例3-5程序代碼#include#include<
5、string.h>#defineSIZE1000charbuf[SIZE];char*p=buf;char*alloc(intn){char*begin;if(p+n<=buf+SIZE){begin=p;p=p+n;return(begin);}elsereturn(NULL);}voidmain(){char*p1,*p2;p1=alloc(10);strcpy(p1,”123456789”);p2=alloc(5);strcpy(p2,”abcd”);printf(“buf=%p”,buf);pri
6、ntf(“p1=%p”,p1);printf(“p2=%p”,p2);puts(p1);puts(p2);for(inti=0;i<15;i++)printf(“%c”,buf[i]);}返回指針值的函數(shù)全局變量輸出地址buf[0]buf[1]::buf[9]buf[10]:buf[14]buf[15]::buf[999]bufpbuf+10p1p2mainbeginnallocbufbufbuf+1012:9