百度百科解释
一、区别:
1、函数定义方式不同
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
2、使用原理不同
函数的形参列于函数声明中,在函数定义的函数体内使用。当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。
实参是用来填充形参的。当函数被调用时,形参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。
3、传值调用和引用调用不同
传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
二、例子
1、你定义一个函数void add(int a, int b),这里的a和b就是形参。
2、当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。
扩展资料
形参和实参的特点
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
其他地方
1
举个例子:
#include<stdio.h>
int ff(int *p){
int *a=p;
int b=*a;
}
int main(){
int b=3;
ff(&b);
}
这是一个伪函数,主要用来说明调用函数的指针传参 p,根据调用参数的声明,我们知道这个传参指针为一个整型指针传参,也就是说p主要用于传输地址用的。
你在看这里的时候或许会对这个“”感到特别迷惑,给你大概解释一下:“int a”中的“”是表示声明的a是一个整型指针变量,传参p中的“”也是这样的,只不过他们一个是传参,一个是局部变量罢了。接下来的“int b=a”中的“”则是取值的意思了,意思就是取出指针变量a中的值,好的!那么这个a中的值是多少呢?从主函数开始看:主函数中定义一个局部的整数型变量b,这里b被赋值为3,通过调用子函数“ff(&b)”来看,“&b”则表示取了b的地址。好!这是“&”的作用。接下来子函数ff就把b的地址传给了指针传参p。最后举个小例子:快递员B从快递员A的手中接到了快递并送给你。快递员只需要传送快递——“&(取地址)”而不需要拆开快递看看里边是啥,当你收到快递后打开快递——“(取值)”后拿出东西使用。
2
实参和形参的区别: 1、实参和形参被分配的地址不同。可以这样比喻,实参是一间别墅,而形参是另一间别墅。实参里的东西被复制了一份搬到了形参里面,而形参这件别墅里面的东西被扔了或者添加了新的东西是不会对实参这件别墅造成影响的。 2、如果不用指针或者引用,实参只能向形参里面传递东西(值),就好比上面的举例,实参的东西能拷贝一份搬到形参里面,而形参里面的东西(值)被改变却不会反向传递,就是形参里面的东西不会覆盖实参的东西(值)。 3、简单地说就是实参和形参操作的地址不同,如果需要得到改变的值,一般都是用return返回值,如果要改变实参都会使用指针或者引用来实现,这样操纵地址使得实参操纵起来更加的方便。 4、形参的作用域仅限于定义的函数内,一旦出了这个函数,定义的形参就会被释放掉。