标题:值传递,地址传递,引用传递
只看楼主
sun934191037
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2013-3-27
结帖率:66.67%
已结贴  问题点数:10 回复次数:9 
值传递,地址传递,引用传递
这不是地址传递吗?为什么没有交换a,b的值呀。。。。。。。。。代码如下
#include<stdio.h>
void fun(int *a,int *b)
{
    int *t;
    t=a;
    a=b;
    b=t;
    printf("%d,%d\n",*a,*b);
}
void main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    fun(&a,&b);
    printf("%d,%d\n",a,b);

}
但是改成这样就可以交换a,b的值了........
#include<stdio.h>
void fun(int *a,int *b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
    printf("%d,%d\n",*a,*b);
}
void main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    fun(&a,&b);
    printf("%d,%d\n",a,b);

}
求大侠帮忙解释一下。。。。。。。

搜索更多相关主题的帖子: void fun include 
2013-04-03 18:04
yctchxf
Rank: 6Rank: 6
来 自:盐城
等 级:侠之大者
威 望:2
帖 子:176
专家分:454
注 册:2012-4-10
得分:2 
变量就像是一个房间,变量的值就像是教室里的学生,而指针则是教室门牌号。 你的第一个程序,是地址交换,交换的是教室的门牌号,里面的学生没有改变。第二个程序就好比是让连个教室的学生换个教室上课。
2013-04-03 18:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:2 
MD,刚说完一个,又来一个,挑衅似的。

授人以渔,不授人以鱼。
2013-04-03 18:20
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:2 
你交换了a和b的指针,a和b当然没有交换了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-03 18:29
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
得分:2 
int a,b,t; a和b相当于两个房间,进房间不需要房卡,每个房间里住着1个人,t=a;a=b;b=t;相当于两个房间里的人互换房间;
int *a,*b,,*t; a和b相当于拿房卡的两个人,通过房卡可以进房间,t=a;a=b;b=t;相当于拿房卡的两个人交换房卡,跟房间里的人没有关系。
2013-04-04 16:08
梅可伟梅可伟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:180
注 册:2013-3-11
得分:2 
形参的传递是单向传递的,第一个函数中虽然A和B的地址改变了,但它不能传给主函数,所以A和B的值不变
而第二个函数中,它直接把A和B的值互换,当然改变了
2013-04-04 22:52
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:2 
我给你一段老谭中讲的:为了使函数中改变的变量中能被main函数所使用,不能采取把要改变的值的变量作为参数的方法,而应该用指针变量作为参数,这样就实现了通过调用函数使变量的值发生变化,在主调函数中使用这些改变的值。

Maybe
2013-04-06 08:58
Molafei
Rank: 1
等 级:新手上路
帖 子:6
专家分:9
注 册:2012-10-14
得分:2 
形参的传递是单向的,你传过去的无论是什么类型在主函数中都是没有被改变的,
2013-04-06 10:21
mskeheng
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:179
注 册:2013-3-13
得分:2 
对于第一个程序:调用函数fun时,系统会分配两个4个字节的空间来存放指针a,b.然后你又定义一个指针(系统分配4个字节空间),a,b两指针交换,即a,b中存储两个地址值发生了交换,两指针指向的数没发生改变,而且函数调用结束后,这三个指针占用的空间将会被释放,而原来a,b却不会发生任何改变。
对于第二个程序:调用函数fun时,系统会也分配两个4个字节的空间来存放指针a,b.同样,然后你有定义一个指针(系统分配4个字节空间),但这个函数交换了a,b两个指针指向的数据。所以a,b发生了交换。
2013-04-06 22:54
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
得分:2 
好像书上这么说的,""函数的形参只会单向传递。""。    实参只会传给形参,形参改变后不会传回实参的。所以主函数的a,b在通过函数后也是不变。
2013-04-07 07:50



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




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

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