| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 663 人关注过本帖, 1 人收藏
标题:无法理解程序结果为什么是29
只看楼主 加入收藏
meishanhuang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-2-12
结帖率:81.82%
收藏(1)
已结贴  问题点数:2 回复次数:5 
无法理解程序结果为什么是29
现有以下程序
int a=2;
int f(int n)
{ static int a=3;
  int t=0;
  if(n%2){ static int a=4;t+=a++;}
     else{ static int a=5;t+=a++;}
  return t+a++;
}
main()
{ int s=a,i;
  for(i=0;i<3;i++) s+=f(i);
  printf("%d\n",s);
}
现有问题1 语句return t+a++;中红色字符的含义是什么?等价于什么?
    问题2 该程序运行过程能否详细说明。感谢
搜索更多相关主题的帖子: static 
2013-03-17 23:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这种题目也就考试老师喜欢

DO IT YOURSELF !
2013-03-18 08:55
heishu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:131
注 册:2012-9-7
收藏
得分:2 
好久没来逛了
程序代码:
int a=2;               //首先这里为全局变量;
 int f(int n)

 { static int a=3;        //当程序执行到这的时候,会屏蔽全局变量a,使用局部变量a,说白了此a非彼a;它们作用域不一样,又此时的a为静态变量,会开辟一个存储单元保存a的值,直到程序结束
   int t=0;
   if(n%2){ static int a=4;t+=a++;}   //同理 ,这里的a也是一个静态局部变量;这里的a不影响return t+a++; 这里的a,但会影响t的值
      else{ static int a=5;t+=a++;}
   return t+a++;       //这里返回的a是:static int a=3;这里的a;
 }

 main()

 { int s=a,i;    //这里的a是全局变量的a
   for(i=0;i<3;i++) s+=f(i);
   printf("%d\n",s);

 }
第一次调用的时候是执行: else{ static int a=5;t+=a++;}这条语句;执行完后t为5,注意在一下在执行这条语句的时候a会为6;执行return t+a++; 之后,返回为8,且a在下一次的时候为4;所以第一次调用后s的值应为10;
第二次调用的时候是执行: static int a=4;t+=a++;}   这条语句,执行完后t为4,再执行return t+a++; ,但此时的a已经是4了,且下一次的时候为5,所以返回为8,这次调用后s的值应为18;
第三次调用的时候是执行:else{ static int a=5;t+=a++;} 这条语句,此时的a已经是6了,因此t为6;在执行 return t+a++; 此时a为5了;所以返回为11;这次调用后的s值应为29;
所以全部调用完后,s的最终值为29;

可能把变量名改成这样更好理解:

 int a=2;

 int f(int n)

 { static int b=3;
   int t=0;
   if(n%2){ static int c=4;t+=c++;}
      else{ static int d=5;t+=d++;}
   return t+b++;

 }

 main()

 { int s=a,i;
   for(i=0;i<3;i++) s+=f(i);
   printf("%d\n",s);

 } 




[ 本帖最后由 heishu 于 2013-3-18 11:46 编辑 ]

[qq]1402050187[/qq]
2013-03-18 11:38
wojiaoliuli5
Rank: 2
等 级:论坛游民
帖 子:6
专家分:15
注 册:2013-3-17
收藏
得分:0 
楼上回答的太对了 这个值得推敲
2013-03-18 16:14
heishu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:131
注 册:2012-9-7
收藏
得分:0 
好久没来逛,也好久没拿分了,如果觉得说的还可以,给个分吧

[qq]1402050187[/qq]
2013-03-18 21:18
快速回复:无法理解程序结果为什么是29
数据加载中...
 
   



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

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