标题:函数在值传递时为什么实参没有变化。
只看楼主
zzh2015
Rank: 1
来 自:江苏扬州
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-4-7
结帖率:90.91%
已结贴  问题点数:1 回复次数:7 
函数在值传递时为什么实参没有变化。
比如
#include<stdio.h>
void swap(int x,int y)
{
    int t=x;
    x=y;
    y=t;
}
int main(void)
{
   int a=10,b=20;
   printf("a=%d b=%d\n",a,b);
   swap(a,b);
   printf("a=%d b=%d\n",a,b);
   return 0;
}
运行结果
a=10 b=20
a=10 b=20
              为什么呐。。。
              还有再请教大神们一个问题,什么叫值传递和地址传递啊。。。请附上程序语言更好啦。。。谢谢!
搜索更多相关主题的帖子: return 程序语言 
2015-04-07 12:56
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:1 
值传递 传的就是数值
址传递  传递的是地址

对于交换数据的函数  一定要传地址

(比如你的例子中)因为在函数中交换引起的结果是 形参发生变换,(此时是值发生改变,而非地址),但是 函数的形参(堆栈) 在函数返回时 是自动销毁的  所以它里面的神马都没有意义了

DO IT YOURSELF !
2015-04-07 13:08
mtf159034666
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2015-4-7
得分:1 
你可以去了解一下指针和引用的功能,估计就会明白了!
2015-04-07 13:17
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
得分:1 
swap函数里面交换的只是临时变量x和y的值

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-04-07 16:03
happy两棵树
Rank: 2
等 级:论坛游民
帖 子:28
专家分:62
注 册:2013-7-18
得分:1 
这个每本书上都有这个例子的,自己去看看书吧
2015-04-07 16:07
胡胡熊
Rank: 1
等 级:新手上路
帖 子:23
专家分:5
注 册:2014-3-13
得分:1 
直接看指针,只有传递参数是实参的地址的时候,在子函数中才能通过改变形参的方式来改变实参。
2015-04-07 17:18
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
得分:1 
值传参实际是传的实参的一份拷贝给形参。

实参是100,就拷贝一份,让形成也变成了100,形参在函数里完成任务,就被KILL掉了,实参原来是什么,现在还是什么。除非你让函数带返回值,返回一个(只能是一个)处理结果再赋值给实参,但这仅限改变一个数据。

若你要让函数去处理多个数据,就要发送数据的地址到函数了,这个时候,函数是主动的,它通过地址,主动去找到数据并改变原数据。

一个值,比如100,内存中可以有很多个100,但是,地址只能有唯一的一个,所以用指针比较有决定性。这是我的总结

[ 本帖最后由 code力力 于 2015-4-7 18:25 编辑 ]

你醒了?快起来敲代码!!
2015-04-07 18:22
zzh2015
Rank: 1
来 自:江苏扬州
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-4-7
得分:0 
回复 3楼 mtf159034666
还没学到

人类的的青春真像一场梦,一种化学的疯狂方式。
2015-04-07 19:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443644-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022393 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved