指標形參和傳遞指向指標的引用
阿新 • • 發佈:2019-01-02
1.指標形參:實現指標指向的值的交換(指標本身不變)
函式的形參是指標時,將複製實參指標,形參的任何改變僅作用於實參的區域性副本,如果函式將新指標賦給形參,主調函式使用的實參指標本事的值沒有變化。
程式碼如下:
輸出結果如下:#include<iostream> #include<string> using namespace std; void Swap(int *x,int *y) { int temp; temp = *x; *x = *y; *y = temp; } int main() { int a = 4; int b = 5; int *x = &a; int *y = &b; cout<<x<<" "<<y<<endl; Swap(x,y); cout<<*x<<" "<<*y<<endl; cout<<x<<" "<<y<<endl; return 0; }
可以看出經過Swap函式呼叫之後指標x和指標y本身並沒有變化(x一直是0x28fe94,y一直是0x28fe90),但是x和y指向的記憶體中儲存的值交換了。
2.傳遞指向指標的引用:實現兩個指標的交換
測試程式碼如下:
輸出結果如下:#include<iostream> using namespace std; void ptrSwap(int *&x,int *&y) { int *tmp=y; y=x; x=tmp; } int main() { int a=10; int b=20; int *x=&a; int *y=&b; cout<<x<<" "<<y<<endl; ptrSwap(x,y); cout<<x<<" "<<y<<endl; cout<<*x<<" "<<*y<<endl; return 0; }
可以看出經過ptrSwap函式呼叫之後指標x和y本身的值互相交換了,即x指向a改為x指向b,則*x為20,。y指向b改為y指向a,則*y=a;
補充:指向指標的引用,int *&x;。這個定義應該從右到左理解,x是一個引用,與指向int型的指標相關聯,也就是說,x只是傳遞進ptrSwap函式的任意指標的別名,即引用,而不是實參指標的複製。
3.總結:
對指標交換和指標指向的值的交換進行了詳細解釋和區分。具體參見C++Primer