
正文
c语言函数内部修改形参的问题,c语言函数改变实参
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言中函数可否改变参数值
1、因此,c语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。
2、就比如 void sum(int a, int b ,int *c) { *c = a + b } void main(){ int c; sum(1,2,&c); printf(%d\n,c);} 这里就是在函数内部直接改变了c的值了。
3、float*,char*等)的都会变 数组类型(int[]、double[]、float[],char[])的也都会变 类也会变(c++范畴)总而言之:参数指向值的,都不会变;参数指向地址的都会变(数组也是指向地址的。
4、而不是被调用函数栈之外的,调用函数之前作为参数值传递给被调用函数的参数的值。如果想在函数内修改入参的值传递出去,就要用指针,或者全局变量。如果是C++,还可以使用“引用类型“变量。
相关问答
Q1: 在c语言中怎样使形参值改变实参值也跟着改变
如果是值传递,a只把123这个值给了形参,但是形参不知道123来源于哪块内存地址,即使形参再怎么变,形参所改变的并不是a所指向的内存地址,a的值不会发生变化。本质看问题,才能看清为什么要出这个问题。
实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。
C语言函数调用中形参值的变化不会传递给实参! 正确!形参都是数值,无论其类型是指针还是普通变量,都是值,指针变量表示地址值,普通变量表示数值。因此,他们代表的数值本身发生变化,与实参没有关系。
这里实参自然不会变化,你这么理解,实参是实际参与到函数计算中的参数,但你这里函数的返回值中,并不包含输入实参的变化,固实参是无变化的。
调用函数有2种方式,传值和传地址。传值,就是你现在程序中的调用方式,这样不能够改变传递进来实参的值。传地址,就是形参是引用或者是指针,这样才能改变传递进来实参的值。这就是区别。
Q2: C语言中可否定义一个函数,这个函数的形参数量可以改变?
可以,声明函数时可以不需要形参名称,只要形参类型。注意这叫函数声明,不叫定义。在大括号中给出函数具体实现的才叫函数定义。定义函数时形参名不能省略。
C语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。
不对,主函数不一定可以调用任意一个函数,如果那个函数被修饰为static属性,且与main函数不在同一个文件中,那么Main无法调用这个函数。
这只是表现手法不同,因为数组名即是这个数组第一个元素在内存中的地址,也就是数组名是指向数组第一个元素的指针,你的这段代码中这个函数原型和函数头部是合法的。
Q3: C语言函数调动参数问题
函数调用只是参数传递,在函数调用时,你可以认为会执行 a=x,b=y ,显然,a并不是x,b也不是y。。你对变量a,b的任何操作都和x,y无关的,x,y只是给a,b附了初值仅此而已。。
一般说来,有两种方法可以把参数传递给函数。第一种叫做“赋值调用”(call by value),这种方法是把参数的值复制到函数的形式参数中。这样,函数中的形式参数的任何变化不会影响到调用时所使用的变量。
第一种:返回实参的拷贝(型参n),n是函数调用者压进堆栈里的。第二种:n是被调用者即fun()在自己堆栈中重新定义的数据,返回这个数据的拷贝。
看你的程序,你是想使用指针做的,既然使用指针做,就需要在star函数的参数中使用指针类型数据。下面是我基于你的程序帮你改的,你可以看看。
正好和动态参数个数的方向相反。因此,c语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。
关于c语言函数内部修改形参的问题和c语言函数改变实参的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







