如何使用指標形參交換兩個整數的值(詳解)
阿新 • • 發佈:2018-12-31
函式內部通過解引用操作改變指標所指的內容
程式碼塊
#include <iostream>
using namespace std;
int swap(int *a,int *b);
int main()
{
int *p,*q;
int min=10;
int max=20;
p=&min;
q=&max;
cout<<"交換前:a= "<<min<<",b= "<<max<<endl;
swap(p,q);
cout<<"交換後:a= " <<min<<",b= "<<max<<endl;
return 0;
}
int swap(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
執行結果如下:
p和q分別是兩個數的地址,通過對地址取內容,從而得到該數的值,交換的時候也應該是將指標指向的數進行交換,如果地址相當於抽屜,裡面的內容相當於芒果和荔枝的話,假設互換前抽屜1裡面是荔枝,抽屜2裡面是芒果。互換之後在主程式裡面輸出對應的地址的值的時候,還是依次開啟前面的抽屜,會發現抽屜1裡面是芒果,抽屜2裡面是荔枝,實現了交換的目的。但是但是如果寫成下面的形式,就無法進行交換。
#include <iostream>
using namespace std;
int swap(int *a,int *b);
int main()
{
int *p,*q;
int min=10;
int max=20;
p=&min;
q=&max;
cout<<"交換前:a= "<<min<<",b= "<<max<<endl;
swap(p,q);
cout<<"交換後:a= "<<min<<",b= " <<max<<endl;
return 0;
}
int swap(int *a,int *b)
{
int *c;
c=a;
a=b;
b=c;
}
執行結果如下:
這是因為在swap函式體內部,只是交換了兩個形參指標本身的值,未能影響實參。這時候如果在形參裡面也有一條列印語句的話,能夠清晰的看到在被調函式裡面,確實交換了指標的值,還是用上面的例子來說明,假設互換前抽屜1裡面是荔枝,抽屜2裡面是芒果。現在沒有開啟抽屜將裡面的東西互換,而是將抽屜的標籤改了。原來貼抽屜1的標籤現在貼成了抽屜2,原來貼抽屜2的標籤換成了抽屜1。那麼按照原來的順序取,取出來的東西也會和原來的不一樣。但是這隻在區域性範圍內有效,呼叫完畢回到主函式就失效了。
測試交換指標只改變區域性變數的程式
#include <iostream>
using namespace std;
int swap(int *a,int *b);
int main()
{
int min=10;
int max=20;
int *p=&min;
int *q=&max;
cout<<"交換前:a= "<<min<<",b= "<<max<<endl;
swap(p,q);
cout<<"交換後:a= "<<min<<",b= "<<max<<endl;
return 0;
}
int swap(int *a,int *b)
{
int *c;
c=a;
a=b;
b=c;
cout<<"test: a= "<<*a<<",b= "<<*b<<endl;
}
執行結果如下: