实参和形参的问题

rossi789 2004-07-24 05:41:32
书上说,形参的值只能有实参赋给.也就是说.形参的值是由实参决定的.但书上还有一句话说."例如,在函数调用时,形参的值变为12,13.实参的值仍为2.3".
这两句话不是有矛盾吗?形参要变首先实参就要变.但怎么实参的值仍为2,3呢.
...全文
981 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengzhe 2004-07-25
  • 打赏
  • 举报
回复
楼上的很好
DancingCode 2004-07-25
  • 打赏
  • 举报
回复
很多国外的书上没有实参和行参的概念,只有传值和传址的概念
hqycxy 2004-07-25
  • 打赏
  • 举报
回复
传值调用与传地址调用不同罢了
kudoxinyiji 2004-07-25
  • 打赏
  • 举报
回复
按值传递只是传了一个拷贝,和原版的毫无关系。
等到出了那个函数那几个拷贝也就被自动销毁掉了。

当然值是不会变的。
elevation2me 2004-07-25
  • 打赏
  • 举报
回复
"例如,在函数调用时,形参的值<<<变>>>为12,13.实参的值<<<仍>>>为2.3"
qiqi162002 2004-07-25
  • 打赏
  • 举报
回复
只能说形参的初始值是由实参决定。调用函数时实参只是把值传给形参,以后函数都是对实参进行处理,所以形参发生改变。就像一楼中的例子,a,b 是实参,把值传给X,Y所以说X,Y初始值由实参决定,以后函数的操作都是对X,Y的操作,所以X,Y这两个形参的改变不会引起a,b的改变。
至于实参为什么没变或者说实参应该怎么通过形参改变,你学了指针后比较容易理解(看你这么问应该还没学指针吧,一般都指针时都是说实参和形参的问题)。
KingI 2004-07-25
  • 打赏
  • 举报
回复
实参一般是不能修改的,它只是传递给被调用函数一个拷贝,可以修改拷贝,但不能修改实参.
要修改实参,可以把它的地址作为参数传递过去, 如:
int a;
pass(&a);
这样就可以修改实参的值了.
Helendeng 2004-07-25
  • 打赏
  • 举报
回复
我今天下午看了一下午的指针也发现这个问题很难理解呀!
ttlb 2004-07-25
  • 打赏
  • 举报
回复
up
hcx5581 2004-07-25
  • 打赏
  • 举报
回复
请看一下值传递的原理吧!
its11117 2004-07-25
  • 打赏
  • 举报
回复
如果参数不是指针:
在函数调用的时候将实参的值赋予形参,进入子函数后,形参和实参之间没任何联系。
如果参数是指针:
传递参数后,形参和实参本身的值并无联系,但他们指向同内存单元,可以通过形参改变实参的值。
freedwind 2004-07-25
  • 打赏
  • 举报
回复
就是上面说的,两者分配的内存空间不同,在形参的内存里变,不影响实参内存里的!
chinayang9 2004-07-25
  • 打赏
  • 举报
回复
比如你对着一朵花画写生,
等你画完之后又在画上加了一只蜜蜂,
难道原来的花上就会落一只蜜蜂吗?

一样的道理。
存储地址不一样。
「已注销」 2004-07-25
  • 打赏
  • 举报
回复
形参会产生一个副本,实参没有
随机宝宝 2004-07-24
  • 打赏
  • 举报
回复
实参和行参所在函数分配的内存空间是不一样的,
所以实参将值传递给形参后,只是形参发生变化,而实参本身就不变了。
eagle758 2004-07-24
  • 打赏
  • 举报
回复
你知道参数的传递有值传递,地址传递和引用传递。
如果你知道那就明为什么了。。。
tongliyun 2004-07-24
  • 打赏
  • 举报
回复
行参和实参,如果是通过传值的方式传递的话.那刚传递的时候两个相对的变量的值是一致的.但是要注意的是,实参和行参的所在的函数的分配的内存空间是不一样的.理解了这个,那么对于参数的传递就不会有什么疑问了.如果还是不懂的话,就画出内存变量的空间图啊.一目了然.
whyglinux 2004-07-24
  • 打赏
  • 举报
回复
因为形参和实参在内存中不是同一个变量。虚实结合时实参的值会传递给虚参,但是从此以后在函数内,实参和虚参就没有联系了,虚参的变化也影响不到实参。
zhj545 2004-07-24
  • 打赏
  • 举报
回复
恩,对,就是这样的!
adoqq 2004-07-24
  • 打赏
  • 举报
回复
int f(int x,int y)
{
x=x+10;
y=y+10;
return (x+y)
}

void main()

{
int a=2;
int b=3;
c=f(a,b);
}

这就是你所说的那种情况

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧