指针与引用的区别

指针&引用

指针里面的值存放的是另一个参数的地址,需要"解引用",也就是用*来取该参数的值,而引用实际上就是另一个参数的别名,这个引用的地址和另一个参数的地址实际上是一样的,代码如下:

//Pointer
#include<iostream>
using namespace std;
void swap(int* x, int* y)
{
	int temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

int main()
{
	int a, b;
	cin >> a >> b;
	cout << "Before Swap: a = " << a << " " << "b = " << b << endl;
	cout << "Before Swap : a = " << a << " " << "b = " << b << endl;
	swap(&a, &b);
	cout << "After Swap: a = " << a << " " << "b = " << b << endl;
	cout << "After Swap : a = " << a << " " << "b = " << b << endl;
	return 0;
}


可以看到,这里面x的值实际上就是实参a的地址,进行交换后

直接就将实参a的值改成6,这里a没有变化的原因是没有点右边的更新,实际上实参a根本就不在swap函数里面,更新之后是下面的样子:

引用的代码如下:

//Reference
#include<iostream>
using namespace std;
void swap(int& x, int& y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}

int main()
{
	int a, b;
	cin >> a >> b;
	cout << "Before Swap: a = " << a << " " << "b = " << b << endl;
	cout << "Before Swap : a = " << a << " " << "b = " << b << endl;
	swap(a, b);
	cout << "After Swap: a = " << a << " " << "b = " << b << endl;
	cout << "After Swap : a = " << a << " " << "b = " << b << endl;
	return 0;
}

在引用中形参x的地址和值和实参a一模一样

交换之后,发现形参x的地址和值和实参a还是一样的:

posted @ 2020-06-11 10:32  ~K2MnO4  阅读(171)  评论(0)    收藏  举报