形参和实参的关系以及值传递问题
要认真体会一下形参和实参的关系,这对初学的小白来说至关重要哦!
注意:示例中主要用java语言来写,但不影响学C方向的同学来,换汤不换药!
一:定义
形参:顾名思义,形参就是形式的参数,是在定义函数名和函数体的时候使用的参数,目的就是用来接收调用该函数时的参数;通俗来讲,形参就是出现在你所写的函数的定义中,在你所写的整个函数体内都可以使用,但是离开这个函数后则不能继续使用。
实参:就是实际的参数,出现在所写的主函数中(例如你的main函数中),在调用时传递该函数的参数。
看下面的图自己体会一下下!
二:值传递(易错点)
那么为什么区分开形参和实参至关重要呢?下面我们来看一段代码。
public class TestDemo {
public static void swap(int x,int y) {
int tmp = x;
x = y;
y = tmp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a = "+ a+" b = "+b);
swap(a,b);
System.out.println("a = "+ a+" b = "+b);
}
}
大家猜一下上面的代码运行结果会是多少?很多初学者可能觉得这就是个简单地交换函数,结果应该是a=20,b=10;那么实际结果却是如下:
三:原因分析
刚才的代码并没有完成数据的交换,因为对于基本的类型来说,形参相当于实参的拷贝,对x和y的修改并不影响a和b,例如我在swap方法里面将x和y的值更改一下,a和b的结果依旧是a = 10,b = 20;
就好比我买了一只雪糕,我舍友看着好吃他也买了一只同样的雪糕,那么他的雪糕和我的雪糕肯定不是一支雪糕呀
解决方法
可以利用数组来解决这一问题
四:总结
在大学的期末考试及研究生入学考试中经常会出现值传递的问题,铭记实参传递给形参的是值,对形参的改变不会影响到实参,c语言中的引用也可以解决值传递的问题,需要多加注意。