C语言函数参数不传递 c语言函数参数传递方式

C语言函数调用中形参值的变化不会传递给实参形参和实参拥有分别的存储空间 , 即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即 , 如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值 。
关于c语言在c中调用函数时,只能把实参的值传递给形参 , 形参的值不能传给实参 。这句话对吗?为什么?不对C语言函数参数不传递,在C语言中C语言函数参数不传递,传值有地址传值和参数传值,参数传值只能将实参传值给形参,所以A选项正确 。C语言中的外部变量是可以在函数之间传递数据的 。
C语言中的自动变量是默认的变量,实际上是函数中的局部变量,所以D选项正确 。全局变量一经定义都是需要分配内存单元 , 在程序运行过程中自始至终都会占用固定的空间,在未知内存情况下,最好不要使用全局变量 。
函数调用时 , 值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行选择 。
扩展资料
C语言参数传递:
1、值传递
参数传递只把变量a的值传递给C语言函数参数不传递了变量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的值 。
在c语言中 , 指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事?【C语言函数参数不传递 c语言函数参数传递方式】C语言中,函数参数只能传值 。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持 。
C++传引用函数:
void foo(int a) { a = 3; }
假如a = 2 , 执行foo(a)后 , a = 3 。
---
C语言可以模拟传引用,方法是通过指针来实现:
void foo2(int* ap) { *ap = 3; }
假如a = 2,执行foo2(a)后,a = 3
foo2(a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数 。
如果:
void foo3(int b) { b = 3; }
假如a = 2,执行foo3(a)后,a = 2 。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关 。
注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的 。
既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如 , 拷贝构造函数等等 。
51单片机c语言中断函数不能进行参数传递,是什么意思 , 谁能解释一下是指中断处理函数不能有输入参数也不能有函数返回 。因为中断都是些硬件自动调用C语言函数参数不传递,没有程序去给C语言函数参数不传递他传递参数C语言函数参数不传递 , 也没有硬件去接收参数 。

推荐阅读