函数的实参传递到形参有两种方式

函数的实参传递到形参有两种方式,第1张

题主是否想询问“函数的实参传递到形参有哪两种方式?”值传递和地址传递。

1、值传递是指将实参的值复制一份,传递给形参,这样函数内部对形参的修改不会影响到实参,这种方式适用于传递基本数据类型和结构体等简单的数据类型,它的优点是传递简单、 *** 作方便,缺点是当参数很大时会造成内存和时间资源的浪费。

2、地址传递是指将实参的地址传递给形参,这样函数内部对形参的修改会影响到实参,这种方式适用于传递数组、结构体等较为复杂的数据类型,它的优点是节约内存、传递的是数据的地址,速度快,缺点是 *** 作稍微复杂一些。

这两道题都是用的传值方式,区别是

38题返回struct类型,其值改变是在函数返回之后,在执行函数过程中

a的值都是不变的。

你可以把38题中a=f(a);改为f(a);就和37结果一样了

若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首地址。

数组首地址数组第一个元素的地址。数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。

比如定义了一个数组变量,编译器就会在内存中划分了一块地址空间给它,数组名这个指针常量就指向了这块内存空间的首地址,而数组首元素就存在这段内存空间的首地址处,即这段内存空间的首地址跟数组首元素的内存地址是一样的。

扩展资料:

 

形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。

没有形参的函数在形参表的位置应该写voidmain 函数也可以有形参和返回值,其形参也称为命令行参数,由 *** 作系统在启动程序时初始化,其返回值传递给 *** 作系统。

两者关系:

在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

一、函数中使用:

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

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

二、调用

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

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

三、不是指针类型在内存中位置不同:

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

举例:

1 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。 

2 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。

扩展资料

形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。

没有形参的函数在形参表的位置应该写voidmain 函数也可以有形参和返回值,其形参也称为命令行参数,由 *** 作系统在启动程序时初始化,其返回值传递给 *** 作系统。

两者关系:

在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

参考资料:

-形参

-实参

在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两

个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量,所进行的值是单向的,即只能从实参传向形参,不能从形参传回实参

第二结构体中有数组元素,即数组名作为函数参数时所进的传递只是地址的传递,,实际上形参数组和实参数组都为同一数组,共同拥有一段内存空间,因此,形参改变,实参也跟着改变。

这里实参自然不会变化,你这么理解,实参是实际参与到函数计算中的参数,但你这里函数的返回值中,并不包含输入实参的变化,固实参是无变化的。简单说,该函数fun是将两输入参数进行互换的 *** 作,但是整个互换 *** 作是在单独的内存空间中完成的,最终函数并没有对输入参数的地址对应的数据进行更改,所以你可以认为是虚的跑了一遍计算,最终什么都没改变。

函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于copy。

那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。

扩展资料

传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。

引用传递是将变量的内存地址传递给方法,方法 *** 作变量时会找到保存在该地址的变量,对其进行 *** 作。会对原变量造成影响。可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

参考资料:

—引用传递

c语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址。

还是用例子说话吧。

#include

int

arry(int

a)

{

int

b;

b

=

a;

int

i;

for(i=0;i<5;i++)

{

printf("%d",a[i]);

}

return

b;

}

int

main()

{

int

a[5]

=

{1,2,3,4,5};

int

c;

int

i;

c

=

arry(a);

for(i=0;i<5;i++)

{

printf("%d",c[i]);

}

}

主要是通过指针把数组,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址 *** 作地址上面的数据了。

arry返回的时候也是返回一个指针(地址)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存