| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 643 人关注过本帖
标题:谁能帮我解释下这个程序
只看楼主 加入收藏
小陈陈
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-12
结帖率:85.71%
收藏
已结贴  问题点数:14 回复次数:8 
谁能帮我解释下这个程序
# include <stdio.h>

void swap_3(int * p, int * q)
{
    int t;
    t = *p; *p = *q; *q = t;
}


int main(void)
{
    int a = 3;
    int b = 5;

    swap_3(&a, &b);
    printf("a = %d, b = %d\n", a, b);

    return 0;
}还是不理解为什么,被调函数执行完之后又没有向主调函数返回值,主调函数里面的a,b 怎么会被改变呢?
搜索更多相关主题的帖子: include return 
2013-10-14 22:07
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:2 
传过去的是地址,形参复制了值(即地址), 取内容时……


莫问前尘有愧,但求今生无悔
2013-10-14 22:57
月祭樱冢
Rank: 2
等 级:论坛游民
帖 子:83
专家分:97
注 册:2013-7-15
收藏
得分:2 
改变了a  b  的地址 也就是说有a和b的值调换了位置 好好想想

算法是程序的灵魂
2013-10-15 00:24
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:2 
有地址 就有值 地址只起指向作用
2013-10-15 00:38
夏时雨
Rank: 2
等 级:论坛游民
帖 子:45
专家分:75
注 册:2013-10-11
收藏
得分:2 
p跟&a是同一个值,就是说*p跟a在内存中占同一段储存单位,改变*p的值实际上就是改变a的值。。,

人生若只如初见
何事秋风悲画扇
2013-10-15 08:21
天空编程
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:123
注 册:2013-7-5
收藏
得分:2 
# include <stdio.h>

void swap_3(int * p, int * q) //这的*p是指向a的地址,*q指向b的地址
{
    int t;
    t = *p; *p = *q; *q = t;//这里是交换指针所指向的变量的值
}


int main(void)
{
    int a = 3;
    int b = 5;

    swap_3(&a, &b);//这里是调用swap_3函数,交换a,b的值
    printf("a = %d, b = %d\n", a, b);

    return 0;
}
2013-10-15 10:54
Dua瀚狼
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:59
专家分:78
注 册:2012-3-11
收藏
得分:2 
引用,值修改!

我怀旧,因为我看不到未来。
2013-10-15 11:06
TK_admin
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-10-15
收藏
得分:2 

  因为   传过去的是地址!  就直接把 地址所指向那个空间里面的值改变了!
    如果  传过去的值的话   就会另外开辟新 的空间空间!  
   你可以这么 理解!
main(){int a=1000; fun2(a);}
fun(int a) {a=100;}  //  这个   是把 值 传递过去  就比如说   程序 在XXXX处申请了一个空间  里面存了  1000这个数    程序运行到fun函数 时  fun  这里又  另外申请了一个空间  yyyy;     当程序fun  函数执行完时  XXXX所表示空间 的值没变!   就是main里面a的  值没变     fun 函数a所代表yyyy 地址空间里面的值变了!

比较
main(){int a=1000;fun(&a);}
fun(int *a){*a=100;}   假设 在main 函数里 程序 给 a  的 地址 为   YYYY   那么YYYY  所代表空间里面的值为1000;     因为fun  里面的是参数 是  地址   ;在fun函数的时候  把a的地址 YYYY赋值给了  fun函数  指针a   所以 fun函数里面的a就代表 地址YYYY ; *a  就是代表 地址YYYY里面的值 ;在fun  函数里面你把空间YYYY里面的值改变了  到了 主函数    他还是YYYY里面的值   ;就是这样 !    不知道能不能传图额!   就这样吧  看不懂算了!  
2013-10-15 11:43
怪叔叔
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:1
帖 子:113
专家分:234
注 册:2013-9-22
收藏
得分:2 
# include <stdio.h>

void swap_3(int * p, int * q) //swap_3告诉我我家的馍馍在p里放着,你家的馍馍在q里放着,我们把它一换吧
{
    int t;//我说好,
    t = *p; //把你家馍馍拿在我手里
    *p = *q; //把我家馍馍放在你家馍馍那儿
    *q = t;//把你家馍馍放在我家馍馍那儿
}


int main(void)
{
    int a = 3;//我家有三个馍馍
    int b = 5;//你家有五个馍馍

    swap_3(&a, &b);//swap_3说我家的馍馍在&a里放着,你家的馍馍在&b里放着,我来偷偷的一换
    printf("a = %d, b = %d\n", a, b);//回来后你发现,你家三个,我家五个

    return 0;
}
直接的地址传递,寻着地址就能把那个地址寻儿藏的东西改了
# include <stdio.h>

void swap_3(int * p, int * q) //这的*p是指向a的地址,*q指向b的地址
{
    int t;
    t = *p; *p = *q; *q = t;//这里是交换指针所指向的变量的值
}


int main(void)
{
    int a = 3;
    int b = 5;

    swap_3(&a, &b);//这里是调用swap_3函数,交换a,b的值
    printf("a = %d, b = %d\n", a, b);

    return 0;
}
2013-10-15 12:00
快速回复:谁能帮我解释下这个程序
数据加载中...
 
   



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

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