天天看點

實參和形參指針做函數參數時,如何改變main函數變量的值

//對輸入的兩個整數按大小順序輸出

代碼如下:

#include<iostream>
using namespace std;
int main()
{
    void swap(int *p1,int *p2);
    int *pointer_1,*pointer_2,a,b;
    cin>>a>>b;
    pointer_1=&a;
    pointer_2=&b;
    if(a<b)swap(pointer_1,pointer_2);
    cout<<"max="<<a<<' '<<"min="<<b<<endl;
    return 0;
}
<span style="color:#ff0000;">void swap(int *p1,int *p2)
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}</span>
           

注釋:在用 變量作函數參數時,虛實結合是采取單向的‘值傳遞’隻能從實參向形參傳遞資料,形參值的改變無法傳回實參,即實參的值不會因為形參的改變而改變。(指針變量做函數參數時也應遵循這一規則,當然字元數組名做函數參數時除外) 這裡我想說的是,用指針變量做函數參數時,在函數執行過程中使指針所指向的變量的值發生改變,在函數調用結束後,這些變量值的變化被保留下來,這樣就實作了通過調用函數使變量的值發生改變,在主調函數中就使用了這些改變了的值。

然而不能試圖通過改變形參指針變量的值而使實參指針變量的值改變。例如這樣:

void swap(int *p1,int *p2)
{
    int *temp;
    temp=p1;
    p1=p2;
    p2=temp;
}
           

是以調用函數時不會改變實參指針變量的值,但可以改變實參指針變量所指向變量的值。

繼續閱讀