其中fun是函數名,函數名前麵的“*”表示函數的返回值是指針,“*”前麵的int表示返回的指針是指向整型變量。
[例1019]從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;就沒有什麼問題。
一般指針型函數的返回值可以是數組名、字符串指針,這樣也可以達到返回多個值的目的。
[例1020]一個班有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個學生第一門課成績的指針,然後在調用程序中通過這個指針來訪問這個學生的每門課程的成績。