形参与实参的区别

本文详细解释了形参和实参的概念及其区别,包括它们的定义、数据传递方式、作用范围以及不同类型参数的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形参和实参的区别

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参变量也不能使用 

形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送

1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。 

2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 

3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生类型不匹配的错误。 

4.函数调用中发生的数据传送是单向的 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变

如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。

### 方法形参实参区别及用法 #### 定义区分 在编程中,特别是在像Java这样的语言里,当提到方法的参数时,通常分为两种:式参数(形参实际参数(实参)。形参是在方法定义中声明的变量列表,这些变量用于接收来自调用者的输入数据[^1]。相反,实参则是指在调用带有参数的方法时所提供的具体数值或对象实例,它们代表了真正要传递给目标方法的信息[^5]。 #### 数据传输机制 对于非指针类型的参数来说,在执行过程中,形参会得到一份实参值的新拷贝,这意味着即使在方法体内改变了形参的值也不会影响到原始的实参[^2]。然而,若是涉及到指针或是引用类型,则情况有所不同——此时传入的是原对象的内存地址而非其内容的一个副本,因此任何针对形参的操作实际上都是直接作用于外部提供的那个真实存在的实体之上,从而可能导致实参的变化[^3]。 #### 使用场景举例 考虑下面一段简单的Java代码片段来展示两者如何工作: ```java public class ParameterExample { public static void main(String[] args){ int a = 10; changeValue(a); System.out.println("After calling method, value of 'a' is still " + a); // 输出结果不变 StringBuilder sb = new StringBuilder("hello"); modifyString(sb); System.out.println("After modifying string builder inside the function, content becomes:" + sb.toString()); // 内容已更改 } private static void changeValue(int b){ b += 5; // 此处修改只会影响局部变量b } private static void modifyString(StringBuilder str){ str.append(", world!"); // 修改StringBuilder对象本身 } } ``` 上述例子清晰地展示了不同情况下形参实参之间的关系及其交互行为。第一个`changeValue()`函数接受了一个整型数作为参数,并试图增加它的值;但由于这里涉及的是基础数据类型,所以即便进行了赋值操作也仅限于临时创建的那个副本上,不会对外部的实际参数造成影响。而在第二个`modifyString()`函数中,由于传入的是一个可变的对象(`StringBuilder`),通过操纵这个对象可以直接改变最初提供给我们的那部分状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值