正文 第36章 指針9(2 / 2)

其中fun是函數名,函數名前麵的“*”表示函數的返回值是指針,“*”前麵的int表示返回的指針是指向整型變量。

[例1019]從10個整數中找出最大者,用指針型函數來實現。

int*findmax(intarr[],intn)

int*p,i;

p=arr;

for(i=1;i

if(*p

p=arr+i;

returnp;

voidmain()

inta[10]={1,3,4,2,8,9,5,88,9,66},*max;

max=findmax(a,10);

printf("max=%d\n",*max);

運行結果為:

max=88

程序說明:這裏的findmax函數返回的是一個指向int型的指針變量,所以必須定義一個指向int型的指針變量max來存放它的返回值。

必須注意的是:不要返回函數中動態局部變量的指針,例如,如果把findmax函數改為:

int*findmax(intarr[],intn)

intp,i;

p=*arr;

for(i=1;i

if(p

p=arr[i];

return&p;

程序編譯時就會出現一個警告,運行則出現錯誤。但如果把變量定義為靜態局部變量,比如,staticintp;就沒有什麼問題。

一般指針型函數的返回值可以是數組名、字符串指針,這樣也可以達到返回多個值的目的。

[例1020]一個班有3個學生,各學4門課程,求第n個學生的成績。用指針型函數來實現。

int*search(intarr[][4],intn)

int*pt;

pt=*(arr+n);/*要把行指針轉換為該行第一個元素的指針*/

returnpt;

voidmain()

intscore[3][4]={{60,70,80,90},{65,75,85,95},{72,82,92,98}},*p,i,n=1;

p=search(score,n);

printf("thescoreofNo.%dare:",n);

for(i=0;i

printf("%d",*(p+i));

程序說明:這個程序返回指向第n個學生第一門課成績的指針,然後在調用程序中通過這個指針來訪問這個學生的每門課程的成績。