【C語言】編寫一個函式,實現兩個數的交換 詳細解答
#include <stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=4,b=5;
swap(a,b);
printf("a = %d ,b = %d\n",a,b);
return 0;
}
這段程式碼執行完以後會發現兩個數不會交換;
顯然,在兩個函式裡,它們的地址並不相同,這意味著,它們並不是相同的儲存空間,改變swap裡的值,實際上僅僅只改變了swap()裡面的a和b的值罷了,一旦swap執行完,swap裡的a和b的儲存空間立即釋放掉,對於main()裡的a和b,沒有半點影響。
那麼接下來再放一段程式碼:
我們分析一下它的原理,它究竟做了哪些變化呢,在swap函式裡,我們將a和b的地址給了swap函式,作為形參,在swap函式中,a和b是指向兩個int 型別的指標,它們接受了main裡面a和b的地址,也就是a=&a (in main());b=&b (in main());所以對*a實際上就是對a(in main())操作啦;#include<stdio.h> int swap(int*,int*); //指標的資料型別是蓋住名字剩下的 所以如此宣告 int main(){ int a = 0; int b = 0; printf("請輸入兩個數字:\n"); scanf("%d%d",&a,&b); //直接執行交換方法 交換地址就是在交換他們的門的鑰匙,然後a可以用b的鑰匙在記憶體中找到b的值,b可以在記憶體中用a的鑰匙去找b的值 swap(&a,&b); printf("a=%d,b=%d\n",a,b); return 0 ; } int swap(int *a,int *b){ int temp; temp =*a ; *a= *b; *b= temp; }
那麼,聰明的你肯定能想到,在swap()函式裡變數a和b的地址肯定和main裡a和b的地址是不同的,swap裡的a,b的地址是指標的地址(在swap裡a,b是指標),而它們的值是在main()裡面a和b的地址;