程式設計C語言指標變數作為函式引數?

函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別。它的作用是將一個變數的地址傳送到另一個函式中。【例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);

}

相關問題答案