深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)

文章目录

  • 前言
  • 一、值传递
  • 二、地址传递
  • 三、引用传递
  • 总结


前言

在主函数实现了解传递的本质。


提示:以下是本篇文章正文内容,下面案例可供参考

一、值传递

在主函数中
#include 
using namespace std;

void main()
{
	int i=10;
	int j=i;
	j=20;
	cout<<"i="<<i<<endl;
	cout<<"j="<<j<<endl;
	system("pause");
}

输出结果为:
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第1张图片
因为在int j=i 时,这是一个开辟一个新内存,然后将i中的值复制到j中的过程。所以,j中的值改变不会引起i中的值的改变。
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第2张图片

#include 
using namespace std;

void test(int j)
{
	j=20;
	cout<<"j="<<j<<endl;
}

void main()
{
	int i=10;
	test(i);
	cout<<"i="<<i<<endl;
	system("pause");
}

二、地址传递

代码如下:

#include 
using namespace std;

void main()
{
	int i=10;
	int *j=&i;
	*j=20;
	cout<<"i="<<i<<endl;
	cout<<"j="<<*j<<endl;
	system("pause");
}

输出结果为:
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第3张图片
因为在 int *j=&i 时,这是一个开辟一个新内存,然后将i的地址的值传入到j中的过程。所以,*j =20就是访问j中地址(就是i的地址),将20赋值于其中,改变值(等于i=20)。
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第4张图片

#include 
using namespace std;

void test(int *j)
{
	*j=20;
	cout<<"j="<<*j<<endl;
}

void main()
{
	int i=10;
	test(&i);
	cout<<"i="<<i<<endl;
	system("pause");
}

三、引用传递

代码如下:

#include 
using namespace std;

void main()
{
	int i=10;
	int &j=i;
	j=20;
	cout<<"i="<<i<<endl;
	cout<<"j="<<j<<endl;
	system("pause");
}

输出结果为:
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第5张图片
因为在 int &j=i 时,这是将i 重命名为 j ,改变 j 的值等同改变 i 的值。
深刻理解形参和实参的三种传递方式(值传递,地址传递,引用传递)_第6张图片

#include 
using namespace std;

void test(int &j)
{
	j=20;
	cout<<"j="<<j<<endl;
}

void main()
{
	int i=10;
	test(i);
	cout<<"i="<<i<<endl;
	system("pause");
}

总结

三种传递就是不一样的赋值结果,值传递,地址传递,引用传递分别为,j 复制 i 值,j 存入 i 的地址 ,i 重命名为 j 。

你可能感兴趣的:(形参与实参,传递,c++,指针,编程语言)