1. 程式人生 > >如何使用指標形參交換兩個整數的值(詳解)

如何使用指標形參交換兩個整數的值(詳解)

函式內部通過解引用操作改變指標所指的內容

程式碼塊

#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;
}

執行結果如下:
這裡寫圖片描述