| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1029 人关注过本帖
标题:只是想知道为什么,谢谢各位啦!
只看楼主 加入收藏
yintaiyuan
Rank: 1
等 级:新手上路
帖 子:21
专家分:1
注 册:2009-11-2
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:14 
只是想知道为什么,谢谢各位啦!
void swap1(int  c0[],int  c1[])

{  int  t;

   t=c0[0];

   c0[0]=c1[0];

   c1[0]=t;

}

void swap2(int  *c0,int  *c1)

{  int t;

  t=*c0;

  *c0=*c1;

  *c1=t;

}

void main()

{ int  a[2]={3,5}, b[2]={3,5};

 swap1(a,a-1);  swap2(&b[0],&b[1]);

 printf("%d  %d  %d  %d \n",a[0],a[1],b[0],b[1]);

}


这程序的答案是 5 5 3 3,而初学者本人觉得是 5 3 5 3 ,很不解,希望高手指教!
搜索更多相关主题的帖子: void 
2010-07-27 14:49
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:2 
程序的答案不是5533 也不是作者你 觉得的5 3 5 3而是 -60 5 5 3

此程序用了两个交换函数
原理一样 均可以达到交换的效果 都是用地址为参数
第一个函数 把 3的地址(a),和-60的地址(a-1) 传了出去 交换后 出现 -60(a) 3 (a-1)
第二个函数 把 3的地址(&b[0]) 和 5的地址(&b[1])  传了出去 交换后 出现 5(b[0]) 3(b[1])

[ 本帖最后由 do8do8do8 于 2010-7-27 15:10 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-27 15:01
yjchaos
Rank: 2
等 级:论坛游民
帖 子:16
专家分:36
注 册:2010-7-4
收藏
得分:2 
(a-1)==(b+1),swap1交换了a[0]和b[1],此时a[0]=5,b[1]=3,swap2交换了b[0]和b[1]的值,所以b[0]=3,b[1]=3
2010-07-27 16:02
yintaiyuan
Rank: 1
等 级:新手上路
帖 子:21
专家分:1
注 册:2009-11-2
收藏
得分:0 
回复 2楼 do8do8do8
谢谢你的回答,可是这是一道二级C题,标准答案给的是5 5 3 3 啊,经VC6.0验证也是5 5 3 3啊。
2010-07-27 16:04
yintaiyuan
Rank: 1
等 级:新手上路
帖 子:21
专家分:1
注 册:2009-11-2
收藏
得分:0 
回复 3楼 yjchaos
你好,请教一下为什么(a-1)==(b+1)???我是新手,看不懂事怎么来的,谢谢你。
2010-07-27 16:07
yjchaos
Rank: 2
等 级:论坛游民
帖 子:16
专家分:36
注 册:2010-7-4
收藏
得分:0 
最简单的方法就是用if语句判断一下就知道了,要解释的话,局部变量和形参放在栈里,所以a先入栈,b后入栈     
0x0000 b[0]
0x0004 b[1]
0x0008 a[0]
0x000c a[1]
2010-07-27 16:57
yjchaos
Rank: 2
等 级:论坛游民
帖 子:16
专家分:36
注 册:2010-7-4
收藏
得分:0 
在你源程序的末尾加这几句
printf("0x%x\n", &b[0]);
printf("0x%x\n", &b[1]);
printf("0x%x\n", &a[0]);
printf("0x%x\n", &a[1]);
你自己看一下输出结果
2010-07-27 16:59
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:2 
回复 7楼 yjchaos
这是在tc与vc中做的比较,如下
tc试验结果
图片附件: 游客没有浏览图片的权限,请 登录注册

vc试验结果
图片附件: 游客没有浏览图片的权限,请 登录注册

可见在tc中数组a的地址在数组b的前面,而在vc中数组a在数组b的后面
数组地址的分配与编译器有关,具体原理就不懂了,哪位大侠解释下

[ 本帖最后由 ggyy4k 于 2010-7-27 17:31 编辑 ]
2010-07-27 17:27
yintaiyuan
Rank: 1
等 级:新手上路
帖 子:21
专家分:1
注 册:2009-11-2
收藏
得分:0 
是啊,看来在TC上又会不同...
2010-07-27 17:39
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:2 
那个-60是随机出现的吗?

我很懒,但我讨厌别人说我懒……
2010-07-27 19:27
快速回复:只是想知道为什么,谢谢各位啦!
数据加载中...
 
   



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

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