C++引用传递和指针传递----初学者总结

引用传递和指针传递都是对地址进行的操作。

引用传递

相当于给实参起了个别名,引用的任何操作都是在原始地址中进行的,所以如果对引用的形参进行了更改,实参也会跟着变化。
(附:在引用传递时,被调形参虽然在堆栈中开辟了新的内存空间,但是存放的却是实参变量的地址,所以调用函数对形参做任何操作,都会对实参有影响。)

简单而言之,就是你(代表原始地址)有个糖(代表地址),引用(假设是个人)硬给你抢过来了,然后你就没了,引用拥有了一个糖,而这个糖原本是你的。

指针传递

指针的传递方式是值传递,它传递的是地址值,地址值传递过程,是被当作函数的局部变量进行处理,即在堆栈中开辟了内存空间,存放的是实参的地址值,相当于给实参存了个副本。
所以当我们对副本进行任何操作,都不会改变实参的值。

个人觉得理解原理了,写代码用哪种方式都不是大问题了,比如说,源数据重要的就用指针传递,原数据不重要的就随意了,喜欢哪种就用那种啦~

身为程序员,写的文章没有几行代码,心里有点不太舒服,所以就简单的写两个例子

引用传递
#include <iostream>
using namespace std;

void swap(int&, int &);  
int main() 
{
	int a = 1, b = 2; 
	cout << "Before swapping"<< endl; 
	cout << "a = " << a << endl; 
	cout << "b = " << b << endl;

	swap (a, b);  // 调用函数

	cout << "\nAfter swapping" << endl; 
	cout << "a = " << a << endl; 
	cout << "b =  "<< b << endl;

	return 0;  
}

void swap(int& n1, int& n2)  
{
	int temp; 
	temp = n1;   
	n1 = n2;
	n2 = temp;
}
输出结果:
Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1
指针传递
#include <iostream>
using namespace std;

void swap(int *, int *); 

int main()
{
	int a = 1,b = 2; 
	cout << "Before swappong" << endl; 
	cout << "a = " << a << endl; 
	cout << "b = " << b << endl; 

	swap(&a, &b);  // 调用函数
	cout << "\nAfter swapping" << endl; 
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	return 0;
}

// 参数是指针
void swap(int *n1, int *n2)  
{
	int temp;  
	temp = *n1;  
	*n1 = *n2; 
	*n2 = temp; 
 }
输出结果:
Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

哈哈,这一个星期收获颇多,在自学C++,这两天在学习指针的部分,看到引用传递和指针传递,觉得很有意思,便搜了很对相关文档看,有的文章写了很多,但我看了还是不明白什么是引用传递什么是指针传递,不过在我不妥协的坚持下,用了一上午去理解了,然后总结为了几句简单的话,若有理解不到位的请多多指教~

发布了13 篇原创文章 · 获赞 16 · 访问量 1919

猜你喜欢

转载自blog.csdn.net/weixin_43614573/article/details/103313377