函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別。它的作用是將一個變數的地址傳送到另一個函式中。【例10-3】題目同【例10-2】,即輸入的兩個整數按大小順序輸出。今用函式處理,而且用指標型別的資料作函式引數。
swap(int*p1,int*p2){
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
main(){
inta,b;
int*pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
printf("\n%d,%d\n",a,b);
}
對程式的說明:1) swap是使用者定義的函式,它的作用是交換兩個變數(a和b)的值。swap函式的形參p1、p2是指標變數。程式執行時,先執行main函式,輸入a和b的值。然後將a和b的地址分別賦給指標變數pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。2) 接著執行if語句,由於a
swap(int*p1,int*p2){
int*temp;
*temp=*p1;/*此語句有問題*/
*p1=*p2;
*p2=temp;
}
請考慮下面的函式能否實現實現a和b互換。
swap(intx,inty){
inttemp;
temp=x;
x=y;
y=temp;
}
如果在main函式中用“swap(a,b);”呼叫swap函式,會有什麼結果呢?【例10-4】請注意,不能企圖通過改變指標形參的值而使指標實參的值改變。
swap(int*p1,int*p2){
int*p;
p=p1;
p1=p2;
p2=p;
}
main(){
inta,b;
int*pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
printf("\n%d,%d\n",*pointer_1,*pointer_2);
}
其中的問題在於不能實現如圖所示的第四步(d)。【例10-5】輸入a、b、c3個整數,按大小順序輸出。
swap(int*pt1,int*pt2){
inttemp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
exchange(int*q1,int*q2,int*q3){
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
main(){
inta,b,c,*p1,*p2,*p3;
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("\n%d,%d,%d\n",a,b,c);
}