這裡蒐索程式師資訊,查找有用的技術資料
当前位置:首页 » 编程语言 » c语言实参为什么不改变
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言实参为什么不改变

发布时间: 2022-04-22 03:36:08

A. c语言 调用函数实参未变 为何

C语言整型、实型数据,如果以变量名称作为参数,系统规定的处理方式就是:实际参数仅决定形式参数的初值,形式参数在子函数内部的操作与实际参数无关。
如果需要子函数内的操作能够影响实际参数的内容,需要使用实际参数变量的地址做参数,使得子函数内部对于形式参数的操作能够直接在实际参数的存储空间内进行。你的子函数定义应该修改为:
int
max(int
*a,int
*b)
{
int
c;
if(*a>*b)
{
c=*a;
*a=*b;
*b=c;
}
}
函数的调用格式应该为:
max(&m,&i);
使用实参地址作为参数,与子函数指针类型的形式参数对应。
达到在子函数中通过实际参数地址,直接操作实际参数变量内容的目的。

B. 求指教:C语言中函数的值传递不是单向的吗为什么这个程序中最后实参的值变了

C语言中函数的值传递,确实是单向的,在这个程序中并没有改变最后实参的值,因为它输出的是形式参数的值。

C. C语言,函数调用中什么情况时,形参的改变会影响实参改变,什么情况下不影响

传递值的时候不影响实参
传递指针的时候能够影响实参。

D. C语言中实参和形参是怎么回事求详细解答!!!


语法意义
上说,
形参

函数
内部为外部传进来的
参数
取的名称,而
实参
则是函数外部准备传给函数的参数的名称,这两个是相对的从
内存
意义上说,形参是函数内的内存空间,实参是函数外的内存空间,每次调用都要将实参从函数外空间复制到函数内内存空间,因此改变形参的值对于实参一点影响也没有。
形参:全称为"形式参数"是在定义函数名和
函数体
的时候使用的参数,目的是用来接收调用该函数时传如的参数.
实参:全称为"实际参数"是在调用时传递个该函数的参数.
形参和实参的类型必须要一致,或者要符合隐含转换规则,
当形参和实参不是指针类型时,在该函数
运行时
,形参和实
参是不同的
变量
,他们在内存中位于不同的位置,形参将实
参的内容复制一份,在该函数运行结束的时候形参被释放,
而实参内容不会改变.
而如果函数的参数是指针类型变量,在调用该函数的
过程
中,传个函数的是实参的地址,在函数体内部使用的也是
实参的地址,即使用的就是实参本身.所以在函数体内部
可以改变实参的值.

E. 在c语言中,不利用指针是不是就不能改变实参值

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

F. c语言fun函数的功能是交换形参的值,不能交换实参的值,都是按值传递为什么不能改变实参的值

voidfun(int*a,int*b)
{
int*c;
c=a;a=b;b=c;
}

因为函数中,形参a,b中保存的都是实参的地址值,c=a;a=b;b=c;这行代码,只是把形参a,b的地址值进行了互换,对调用函数的实参所保存的结果是没有任何影响的。如果换成如下代码:

voidfun(int*a,int*b)
{
intc;
c=*a;*a=*b;*b=c;
}

互换的是指针所指空间的值,即互换了调用函数的实参所保存的数值

G. C语言中实参和形参是怎么回事求详细解答!!!

从语法意义上说,形参是函数内部为外部传进来的参数取的名称,而实参则是函数外部准备传给函数的参数的名称,这两个是相对的从内存意义上说,形参是函数内的内存空间,实参是函数外的内存空间,每次调用都要将实参从函数外空间复制到函数内内存空间,因此改变形参的值对于实参一点影响也没有。
形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数.
实参:全称为"实际参数"是在调用时传递个该函数的参数.

形参和实参的类型必须要一致,或者要符合隐含转换规则,
当形参和实参不是指针类型时,在该函数运行时,形参和实
参是不同的变量,他们在内存中位于不同的位置,形参将实
参的内容复制一份,在该函数运行结束的时候形参被释放,
而实参内容不会改变.

而如果函数的参数是指针类型变量,在调用该函数的过程
中,传个函数的是实参的地址,在函数体内部使用的也是
实参的地址,即使用的就是实参本身.所以在函数体内部
可以改变实参的值.

H. C语言调用函数后,为什么实参的值没有发生改变

你理解错了

函数里的实质是 实 参 复 制 形 参

你上面s(m)对于函数int s(int x)来说.

函数内部里只是把m的值1传给了x.然后x=2

x的值改变和m有什么关系呢


要想改变m的话可以这么改写函数

ints(int*p)
{
*p=2;
}
voidmain()
{
intm=1;
s(&m);
printf("%d ",m);
}

区别在于

第二个用的是地址.虽然也是复制形参,

但是他们是复制的是 地 址.

所以这里s(&m) 使得 &m等于p

&m和p都是地址,

那么*p和m指的是同一个地址的值

所以*p=2本质也就是m=2

I. 一个C语言问题,请问为什么无法改变实参的值

你的函数带返回值,应该这么写:
M=Function_A(M);

J. 为什么c语言不能通过执行调用函数来改变实参指针变量的值

调用函数,只能改变指针指向的内存空间的内容,不能改变实参指针变量的值。

我觉得题主对指针变量,还算有一点了解。
指针变量,其实也就是一个变量,但它的值是一块内存的地址。
函数调用时,你只是把实参指针变量的值,即一块内存的地址,赋(复制)给了形参,然后,你在函数内把形参指针指向别的内存空间地址,与实参指针就无关了,实参指针还是指向原来的那块内存空间。
另外,你把实参指针变量的值,赋(复制)给了形参,然后形参指针就能操纵这块内存了,可以改变这块内存的容。此时,实参指针指向的那块内存的内容也就改变了,但实参指针的值还是函数调用前的那块内存空间的地址。