c++ 函數調用

代碼:

#include<iostream>

using namespace std;

void swap1(int a,int b)
{
    int temp = 0;
    
    temp = a;
    a = b;
    b = temp;
}

void swap2(int *pa,int *pb)
{
    int temp = 0;

    temp = *pa;
    *pa = *pb;
    *pb = temp;
}

void swap3(int *pa,int *pb)
{
    int *ptemp;

    ptemp = pa;
    pa = pb;
    pb = ptemp;
}

int main()
{
    int a = 2014;
    int b = 2015;
    int *pa = &a;
    int *pb = &b;

    swap1(*pa,*pb);
    cout<<"a="<<*pa<<"; b="<<*pb<<endl;

    swap1(a,b);
    cout<<"a="<<*pa<<"; b="<<*pb<<endl;

    swap2(pa,pb);
    cout<<"a="<<*pa<<"; b="<<*pb<<endl;

    swap2(&a,&b);
    cout<<"a="<<*pa<<"; b="<<*pb<<endl;

    swap3(pa,pb);
    cout<<"a="<<*pa<<"; b="<<*pb<<endl;

    return 0;
}


運行結果:
在這裏插入圖片描述
分析:

    第一次調用swap1函數時實參爲 *pa,*pb ,形參爲 a,b ,所以 a,b 的值只在調用函數中交換,並沒有影響
        主函數中的 *pa,*pb,所以輸出結果仍爲 a=2014; b=2015。
    第二次調用swap1函數時實參爲 a,b ,形參也爲 a,b ,但是同樣只是在調用函數中交換,沒有改變  *pa,
        *pb,所以輸出結果仍爲 a=2014; b=2015。
    第三次調用swap2函數時實參爲 pa,pb ,形參爲 *pa,*pb,交換了指針所指的值,所以輸出結果爲
        a=2015; b=2014。
    第四次調用swap2函數時實參爲 &a,&b,形參爲 *pa,*pb,可以交換,由於上次的結果爲 a=2015; b=2014,
        所以交換後爲 a=2014; b=2015。
    第五次調用swap2函數時實參爲 pa,pb,形參爲 *pa,*pb,相當於用新的指針指向原來的指針,所以交換的
        時候只交換了新的指針,並沒有改變原來指針所指的值,所以結果爲a=2014; b=2015。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章