用指針變量作為函數參數的方式:
主函數
int main(){
void swap1(int *p1,int *p2);
void swap2(int *p1,int *p2);
int *point_1,*point_2,a,b;
printf("請輸入a、b:");
scanf("%d,%d",&a,&b);
point_1=&a;point_2=&b;
if(a<b){
swap2(point_1,point_2);
//用swap1得不到想要的結果
}
printf("a=%d,b=%d\n",a,b);
printf("*point_1=%d,*point_2=%d\n",*point_1,*point_2);
}
swap1函數:
//這種就是企圖改變指針形參的值來改變指針實參的值
void swap1(int *p1,int *p2){
int *p;
p=p1;
p1=p2;
p2=p;
}
swap2函數:
void swap2(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
若是用swap1函數的話:
輸出結果:(要實作兩個整數的降序輸出)
顯然,這個結果不是我想要的結果
若是用swap2函數的話:
輸出結果:(要實作兩個整數的降序輸出)
原理看圖比較好了解
swap1函數的圖解:
交換的隻是swap1函數中的兩個形參的内容,而point_1、2和a、b的值都未變,就是實參和形參的問題
要想得到正确的結果,可以直接在swap1函數中輸出 *p1 和 *p2
swap2函數的圖解:
【總結】正式點來說就是:實參變量和形參變量之間的資料傳遞是單向的“值傳遞”方式。不可能通過執行調用函數來改變實參指針變量的值,但是可以改變實參指針變量所指變量的值