c语言中形参和实参的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中形参和实参的区别是啥?相关的知识,希望对你有一定的参考价值。

有以下区别:
1、主体不同:实参在调用有参函数时,函数名后面括号中的参数为“实际参数”。形参不是实际存在变量,又称虚拟变量。
2、目的不同:实参可以是常量、变量或表达式,无论实参是何种类型的量,在进行函数调用时,都必须具有确定的值,以便把这些值传送给形参。
需要注意当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。
参考技术A 形式参数和实际参数
函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
函数的形参和实参具有以下特点:
1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

【例】可以说明这个问题。
main()

int n;
printf("input number\n");
scanf("%d",&n);
s(n);
printf("n=%d\n",n);

int s(int n)

int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);


本程序中定义了一个函数s,该函数的功能是求∑ni的值。在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n,但这是两个不同的量,各自的作用域不同)。在主函数中用printf 语句输出一次n值,这个n值是实参n的值。在函数s中也用printf 语句输出了一次n值,这个n值是形参最后取得的n值0。从运行情况看,输入n值为100。即实参n的值为100。把此值传给函数s时,形参n的初值也为100,在执行函数过程中,形参n的值变为5050。返回主函数之后,输出实参n的值仍为100。可见实参的值不随形参的变化而变化。
参考技术B 高级语言在设计程序模块时,模块名定义后,紧跟其后所定义的参数(括弧内)被称为形参(也称虚参)。当该模块被调用时,在主调模块中,出现在被调用的模块名后的参数被称为实参。实参代替虚参的过程被称为虚、实结合,也称换参。多数高级语言的换参是由编译系统来完成,比如C语言和FORTRAN语言亦是如此。BASIC语言的换参则是由程序设计人员来完成的。如果只允许实参向虚参传递,则被称为“单向传递”,C语言的变量类虚、实结合即是“单向传递”。如果同时允许虚参向实参传递,这种传递被称为“双向传递”,FORTRAN 语言定义的子程序即是如此。 参考技术C 1、形参 form parameter
实参 real parameter
出现在函数定义中的参数,就叫形参
出现在函数调用中的参数,就叫实参

2、例如:
函数定义:
int max( int a , int b ) //这里的a,b就是形参

//在函数中,形参就可以当作是一个局部变量。
if ( a>b ) return a;
else return b;

函数调用
int main()

int a=3,b=5 ;

printf( "max=%d\n" , max(a,b) ); //这里的a,b就是实参 C中的函数参数传递是传递变量的数值,因此,这里相当于调用 max(3,5) 而子函数中收到的就会是 3 5这两值,而与ab变量没有关系。
return 0;
参考技术D 在c中由于函数的调用就伴随着接口的问题。
一个函数就是用来实现一个功能的,
如:
#include<stdio.h>

int add(int a,int b)//把两个数相加

int c;
c=a+b;
return c;

int main()

int num1;
int num2;
printf("输入两个数:\n");
scanf("%d,%d",&a,&b);
printf("%d",add(num1,num2));
return 0;

它相当于一个处理数据的机器,而数据就是原材料,这就需要一个材料的输入口,就是函数设计的接口,在这个过程中我们首先定义了一个函数add(int a,int b)(制造了一台机器),在定义这个函数的时候由于我们只是赋予它这个使两个数相加的功能,但是定不知道它将把那两个数相加,所以就先给它设定是对a,b相加,(就像我们只是造了机器,知道它的作用而没有原料)这时的a,b就是形参,即它只是一个形式上的数据,是定义在函数中的。
而实参就是在调用函数的时候要向形参传递值,如num1,num2,(它就是机器要开工时需要的原料,有了它机器才能进行加工),我们实际上是要吧num1,num2相加,只是在主函数里写代码太繁杂,就把代码写到函数里边。这时形参a,b被赋予了num1,num2的值后就可以代替num1,num2在add函数体中完成本想对num1,num2进行的操作(至于为什么要用实参形参还涉及到数据的作用域的问题)

C/C++形参和实参的区别?

本人是C/C++小白一个,理解不是特别深刻,本文适合C/C++初学者阅读,欢迎大家共同探讨交流。
关于定义的文字解释可以搜索相关概念,在这里,我们来结合简单的代码来看一下形参和实参的定义:


说的通俗一点就是函数声明和定义时候的参数,是形参,形参不占用内存空间,而在函数调用过程中传的参数是实参,这些参数都是占据内存空间的。
那么两者有什么区别呢?
两者的区别:
1.形参在调用的时候才会分配内存,调用结束立即释放;而实参则是最初就会分配内存。
2.由于函数定义域的原因,形参和实参在各自定义域内互不影响,也就是改变形参的值并不会影响实参。如图所示:


调用结束后,a,b值未发生变化

3.如果函数声明中形参是引用或者指针,那就会发生形参和实参指向同一片内存地址的情况,此时在调用函数的过程中,形参数据的改变会影响实参的值。如图所示:
主调函数调用交换函数前

交换函数执行后,主调函数a,b值发生变化:

“蝉噪林逾静,鸟鸣山更幽。”

以上是关于c语言中形参和实参的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C中数组在函数中形参和实参的区别

关于java中的形参和实参的区别-----转载

C/C++形参和实参的区别?

C/C++形参和实参的区别?

形参的形参和实参的关系

形参和实参的区别