C語言指標變數實現 交換swap
阿新 • • 發佈:2020-12-21
C語言指標變數實現 交換
不使用指標變數:
正確寫法
t=a;//正確的
a=b;
b=t;
錯誤寫法
#include<stdio.h>
int main()
{
void swap(int x,int y);
int *point_1,*point_2;
int a,b;
scanf("%d%d",&a,&b);
swap(a,b);
printf("%d %d",a,b);
return 0;
}
void swap(int x,int y)//錯誤的
{
int temp;
temp= x;
x=y;
y=temp;
}
不能企圖通過改變指標形參的值而使指標實參的值改變,函式結束時,形參x,y已經釋放,而main函式中的a與b 並未互換,不能採取把要改變值的變數作為引數的辦法,可以使用指標變數作為函式引數,函式執行時將指標變數所指向的變數值發生變化
使用指標變數:
兩個數由大到小輸出
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int *point_1,*point_2;
int *temp;
int a,b;
scanf("%d%d",&a,& b);
point_1=&a;
point_2=&b;
if(a<b)
{
temp=point_1; //使指向a與b的指標變數(地址)交換,a與b的值並未改變
point_1=point_2;
point_2=temp;
}
printf("%d %d\n",a,b);
printf("%d %d",*point_1,*point_2); //取地址交換後指標變數的內容
return 0;
}
輸入a 與 b 的值分別為 3 和 6
定義swap函式實現
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int *point_1,*point_2; //定義兩個指標變數
int a,b;
scanf("%d%d",&a,&b);
point_1=&a; //使指標變數point_1指向a
point_2=&b; //使指標變數point_2指向b
if(a<b) swap(point_1,point_2);
printf("%d %d",*point_1,*point_2);
return 0;
}
void swap(int *p1,int *p2) //定義swap函式
{
int temp; //定義一個整型變數temp作為臨時輔助變數實現a,b的交換
temp=*p1; //相當於 temp=a;
*p1=*p2; //相當於 a=b;
*p2=temp; //相當於 b=temp; 即指標變數中內容的交換
}
錯誤寫法:
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
在這裡插入程式碼片
C語言中實參變數與形參變數之間的資料傳遞是單向的“值傳遞”方式,不能通過執行呼叫函式來改變實參指標變數的值,只可以改變實參指標變數所指向變數的值,不能企圖通過改變指標形參的值而使指標實參的值改變