指针形参和传递指向指针的引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013637931/article/details/45028849

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

展开阅读全文

没有更多推荐了,返回首页