| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2185 人关注过本帖
标题:搞不懂,全是i++问题!
只看楼主 加入收藏
燕大一狼
Rank: 2
等 级:论坛游民
帖 子:14
专家分:17
注 册:2009-10-3
收藏
得分:0 
p=(i++)+(i++)+(i++)=5+5+5=15为什么?为什么不是5+6+7?
q值为什么为22,我也不懂,我也认为q=6+7+8=21?
2009-11-25 12:41
Happy_ZhangX
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2009-11-30
收藏
得分:0 
12楼那句话最关键
2009-11-30 15:48
Happy_ZhangX
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2009-11-30
收藏
得分:0 
以下是引用燕大一狼在2009-11-25 12:41:10的发言:

p=(i++)+(i++)+(i++)=5+5+5=15为什么?为什么不是5+6+7?
q值为什么为22,我也不懂,我也认为q=6+7+8=21?
先完成整条语句再+啊

q=(++j)+(++j)+(++j);的没懂
2009-11-30 15:57
chenji992
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-12
收藏
得分:0 
我也是不明白。
2010-01-13 18:04
doubleflygo
Rank: 2
等 级:论坛游民
帖 子:26
专家分:50
注 册:2010-1-22
收藏
得分:0 
#include<stdio.h>
void main()
{
   int i=7,j=3,p,q,t;
   p=(i++)+(i++)+(i++);//p=5+5+5=15 i=8;i++(由当i=6时,得到p=18=6+6+6;i=7时,得到p=21=7+7+7,由此可以假定编译器在遇到
                                //            后置++的时候在一个表达中的时候是一起编译赋值的;)
                                //推断出 p=n个i后置++的和,则结果是n*i,实践证明如此;
   q=(++j)+(++j)+(++j)+(++j)+(++j);//q=7+7+8=22    j=8;(由当j=4的时候得到q=19=6+6+7,j=3的时候得到q=16=5+5+6)由此可以假设编译器在遇到
                        //                  前置++的时候,则是两两解决的);
                        //推断出p=n(n>2)个j前置++的和,则结果是(j+2)+(j+2)+(j+3)+(j+4)+...+(j+n)=1+(2j+1+n)*n/2
                        //实践证明,当n和j变化时仍然符合上述计算规则;
                        //由此试想:当将题中j和i的前后置两种表达式混合起来,那应该如何计算?不妨在设一个变量t;

       printf("%d  %d  %d  %d\n",i,p,j,q);
   t=(++j)+(++j)+(i++)+(++j)+(i++)+(++j);
  // t=(++j)+(++j)+(++j)+(++j)+(i++)+(i++);混合起来仍然满足上述规则
    printf("%d  %d  %d\n",i,j,t);
}
//总结:编译器在编译带有前置++或者后置++的表达式的时候,
//    1.遇到后置++时,压栈,扫描结束时,将所有前缀一样的后置++的表达式都赋值为前缀的初值进行计算,最后前缀根据弹栈的次数自身+1
//    2.遇到前置++时,压栈,扫描到后缀相同的前置++时,则先弹栈,将两个前置++的初值赋值于2(出现++的次数)+前缀初值=新值代入进行计算,然后将
//      所得的结果压栈,直至下次遇到相同后缀的前置++,则继续弹栈,将一个前置++新值赋值于1(出现++次数)+上一次新值=新值代入计算;
//          如此反复直至结束;
2010-01-22 16:59
快速回复:搞不懂,全是i++问题!
数据加载中...
 
   



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

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