1. 程式人生 > >指標形參和傳遞指向指標的引用

指標形參和傳遞指向指標的引用

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