关于c语言在c中调用函数时,只能把实参的值传递给形参,形参的值不能传给实参。这句话对吗?为什么?

关于c语言在c中调用函数时,只能把实参的值传递给形参,形参的值不能传给实参。这句话对吗?为什么?,第1张

不对,在C语言中,传值有地址传值和参数传值,参数传值只能将实参传值给形参友清,所以A选项正确。C语言中的外部变量是可以在函数之间传递数据的。

C语言中的自动变量是默认的变量野此,实际上是函数中的局部变量,所以D选项正确。全局变量一经定义都是需要分配内存单元,在程序运行过程中自始至终都会占用固定的空间,在未知内存情况下,最好不要使用全局变量。

函数调用时,值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行选择。

扩展资料

C语言参数传递:

1、值传递

参数传递只把变量a的值传递给了变量p,此时变量a与变量p是值相同的两个不同变量,在内存不同的两个地址中,所以对变量p赋值只是修改了变量p的值,并不能修改变量a的值。总结一句话就是:值传递不传递变量本身,只传递变量的值。

2、引用传递

与值传递不同,func的参数是int &p,表示引用传递。如输出所示,通过引用传递,变量a的地址与变量p是相同的,也就是说引用传递把a的地址传给了变量p,所以对变量p进行赋值之后,变量a的值也改变了,因为变量a与变量p实际是同一个变量。

3、指针传递

指针传递,顾名思义,int *p表明p是一个指针变量,调用func(&a)是把变量a的内存地址传递过去赋值给指针变量p,此时指针变量p的值是变量a的内存地址,故可看到输出p为efbfde2c(好脊前变量a的内存地址)。

*p是对指针p的值(即变量a的内存地址)进行取值,相当于*&a,所以对*p进行赋值也就改变了变量a的值。

函数只有两种传递方式:

1、值液培搏传递,又闹祥称单向传递,只能把实参数值传给形参 ,形参最后的结果不影响实参(形参改变大小 ,实参大小不变)。

2、址传递,通过指针,把实参的地址给形参,形参的大小可以影响实参。

扩展资料:

实参变量和形参变量之间的调用过程

1、函数的形参列于函数声明中,在函数定义的函数体内使用,在未出现函数调用时,形参不占内存中的存储单元。

2、将实参的值传递给形参,当函数被调用时,实参列在函数名后面的括号里,执行函数调用时,实参被传递给形参。

3、在执行函数期间,由于形参已经有值,可以利用其进行相关运算。

4、通过return语句将函数值带回到主调函中隐数。

5、调用结束,形参单元被释放。实参单元仍保留并维持原值(值传递)。

参考资料来源:百度百科-实际参数

在另一个函数内调用该函数。从而得到该函数的返回值,实现悉扰裤传李乱递。

例:

int

sum(int

m,int

n)

{

return

m+n

}

void

main()

{

printf("%d",sum(3,6))

}

此例中,睁简main函数在输出语句中调用sum函数从而得到sum函数的返回值并输出


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

原文地址: http://outofmemory.cn/yw/12488651.html

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

发表评论

登录后才能评论

评论列表(0条)

保存