C++ 函式參數指標寫法

void swap(int a, int b) // call by value
{
int tmp = a;
a = b;
b = tmp;
}

void main(void)
{
int x = 2, y = 3;
swap(x, y);
}
答案是無效果,因為 swap( ) 內的 a,b 是 x,y 的複製品,完全是把 x, y的值複製到其他的記憶體空間,所以做任何計算都不會影響到 x, y。如果你所設計的函式是要變更輸入的變數的內容,你必須傳入指標,如下例所示,雖然 swap 傳入的是 x, y 變數所在位址的複製品,但是寫入的位址的確是 x, y 儲存資料的地方,所以他們的數值被更動了。

void swap(int * p, int * q)
{
int tmp = *p;
*p = *q;
*q = tmp;
}

void main(void)
{
int x = 2, y = 3;
swap(&x, &y);
}
另一種同樣有效的寫法是傳參考,參考和指標基本上是原理相同,語法不同的東西,雖然 swap 傳入的是 x, y 變數的參考,其實就是傳入了 x,y 的位址。

void swap(int & a, int & b)
{
int tmp = a;
a = b;
b = tmp;
}

void main(void)
{
int x = 2, y = 3;
swap(x, y);
}

arrow
arrow
    全站熱搜

    createps 發表在 痞客邦 留言(0) 人氣()