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

如题所述

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

谢谢前辈

这个书上说交换a和b得值?

为什么a和b会互换?

追答

swap就是我说的情况,传参的时候就是传入的地址,比如
int *p=&a,*q=&b,
swap(p,q)
p、q就a,b的地址

交换值的时候,你看一下,都是对*p、*q进行赋值(*号就是取内容运算符)。

去掉*号的话,只是交换了一下形参的地址,就不能达到交换的目的了。。。

这里指针相当于一个中介。。。

实参其实是指针,并不是a,b变量,函数没有改变真正的实参(指针值)

追问

也就是交换得是指针然后取得实参地址就是那个a和b然后用*p1和*p2改变地址

*p1和*p2不是形参吗?

追答

你理解反了。。。输入的是指针,实参就是指针,没有改变实参,没有交换指针,是通过指针修改了指针下的内容。

传入的是指针。。。

指针值就是变量的地址,始终没有根本这个地址吧。

追问

谢谢前辈,那前辈在这里*p1和p2是实参,那形参是谁?

追答

你再想想,到底函数的实参是什么,不是a、b变量。。。

追问

实参是*pointer1和2然后形参是*p1和2?

追答

实参和形参除了数值相同以外,完全是两个东西,调用函数的时候,会再形成一块内存空间,把实参的数值赋值到这个空间里,以便在函数内部使用。

追问

奥,这样啊,谢谢前辈啊,感觉指针这里好难

追答

多思考,到一定程度就会顿悟的。。。

追问

嗯,谢谢前辈。我老是分不清实参,按书上定义卡,就给a,b当实参了……

追答

书上这部分大多不够严谨,主要是编辑的水平问题。。。

本回答被提问者采纳
相似回答