| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 431 人关注过本帖
标题:请教一个问题,希望高手赐教
取消只看楼主 加入收藏
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
请教一个问题,希望高手赐教
40.有以下程序:
  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]);
   }
   程序运行后的输出结果是( A  )。
   A.5 5 3 3              B.5 3 3 5
   C.3 5 3 5              D.5 3 5 3
2010-08-09 16:37
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
40.与变量存储顺序有关。

在此题中,函数swap1与swap2是完全等价的,作用上没有任何区别。

从编译原理看,编译器有一个变量定义栈。编译器每遇到一个新定义的变量就将其压入栈。等所有变量全部定义完毕,再从栈逐个弹出。

根据栈的特点,编译时,最后遇到的变量最先弹出,于是最早存放在内存中。

在本题中,先定义a数组,再定义b数组,所以内存中先存放b数组,再存放a数组。

所以两个数组在内存中的存放顺序是b[0] b[1] a[0] a[1]。其值依次为3 5 3 5。

在swap1(a,a-1);语句中,a-1是一个溢出的地址,按理说是不该出现的。但根据变量存放顺序,它实际上指向的是b[1]。

所以执行swap1时,实际是将中间的两个变量的值互换,也就是互换b[1]和a[0]的值,四个变量依次为3 3 5 5。

执行swap2时,将b[0]和b[1]的值互换,四个变量依次为3 3 5 5。

输出时,对应a[0]、a[1]、b[0]、b[1]依次为5、5、3、3。
以上是高手的解答,我有点不懂,就是这个栈的问题,是不是变量定义后都要先进栈再出栈的啊
2010-08-09 16:38
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
http://bbs.lehu.shu.
我在这里也问过了的
2010-08-09 16:39
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
高手有独到见解麻烦说一下,小弟不胜感激
2010-08-09 16:39
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
我只想知道  为什么先入栈的在内存地址的高端
2010-08-09 19:30
快速回复:请教一个问题,希望高手赐教
数据加载中...
 
   



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

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