【C++】如何理解函数调用中的传值和传址

一.代码用例

        本篇文章使用以下代码进行阐述说明:

#include <Windows.h>

void SwapValue(int x,int y)
{
	int t = 0;
	t = x;
	x = y;
	y = t;
	printf("x = %d,y = %d\n",x,y);
}

void SwapAddress(int* x,int* y)
{
	int t = 0;
	t = *x;
	*x = *y;
	*y = t;
	printf("x = %d,y = %d\n", *x, *y);
}

int main()
{
	int a = 3;
	int b = 2;
	
	SwapValue(a,b);
	//SwapAddress(&a,&b);

	printf("a = %d,b = %d\n",a,b);
	system("pause");

    return 0;
}

二.形参和实参

        什么是形参?比如有以下的交换数值函数:

         

         其中int x,和int y就是形参,为什么叫形参?因为它们是没有数值的参数,类似两个没有装东西的瓶子:

        

        函数里面定义了这两个瓶子需要怎么用(例子中就是把两个瓶子里面的内容交换过来),这种行为就和数学中的函数表达式一样

         比如公式:ax+by=c,x和y就是形参,只有确定了x和y具体等于多少,再根据公式计算才能得出结果:

        图上在主函数中把具体数值传输到交换函数中去,这就是实参

 

 三.传值

        其实传值的具体核心上面已经全部讲完了,当主函数中把a和b的值复制一份给了X和Y,这样就导致四个瓶子里面有四个值:

        紧接着,瓶子x和y根据函数规则进行交换,从而使得两个瓶子的数值调换:

        所以可以得出最后的结果:

         总结:函数调用中的传值是把实参中的数据复制一份给形参,所以两个参数之间互不相干

四.传址

        传址的意思就是把实参的地址直接给了形参,让形参通过地址来修改真正的值,在例子中就相当于两个形参x和y把a和b连数据带瓶子全部装进了瓶子中:

        然后再根据函数所示把瓶子里面的值进行互换:

        代码如下:

        输出之后你就会发现如下结果:

        总结:函数调用中的传址是把实参的本体放到了形参里,所以两个参数之间会互相干扰。

        题外话:如果将代码改成这样:

        效果就会变成和传值一样:

        因为这个的意思就是把瓶子X和瓶子Y里面的瓶子a和瓶子b互换:

            如果你不知道是为什么,那就快快拿起你的笔记本去学习一下指针的相关知识~~ 

猜你喜欢

转载自blog.csdn.net/qq_41884002/article/details/126662940