有趣的 i++ 与 ++i

zhp80 2004-04-06 05:31:29
BYTE x[] = {1, 2, 3, 4, 5, 6 };
int i = 0;
int sumA = x[i++] + x[i++] + x[i++];
i = 0;
int sumB = x[i] + x[++i] + x[++i];
i = 0;
int sumC = x[i] + x[++i] + x[(++i)++];

Q1. sumA = ?
sumB = ?
sumC = ?

Q2. why sumB <> sumC

Q3. sumC 的值怎么得出来的?
...全文
102 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
mazying 2004-04-20
  • 打赏
  • 举报
回复
这个就叫基础扎实吧!呵呵!
ahao 2004-04-20
  • 打赏
  • 举报
回复
救命啊~
foreveryoung 2004-04-13
  • 打赏
  • 举报
回复
你这人也是的,这么多朋友都回话了,你至少也得有针对地给分吧!你这人也是的,这么多朋友都回话了,你至少也得有针对地给分吧!
pomelowu 2004-04-12
  • 打赏
  • 举报
回复
楼上,C++和C#虽说很相似,但是处理机制相差太远了,我觉得相对于C++,C#更像java一些。
PiggyXP 2004-04-12
  • 打赏
  • 举报
回复
非常有趣的是,楼主的例子用 VS.net里的C++和C#的编译器结果是不一样的
bhut 2004-04-12
  • 打赏
  • 举报
回复
xhzhang6 2004-04-12
  • 打赏
  • 举报
回复

刚开始学C的时候研究过,实际用的很少,
可能在笔试时会见到,感觉很很很无聊,
如果自己写程序用这些东西那就自找麻烦

社会栋梁 2004-04-09
  • 打赏
  • 举报
回复
up
showjancn 2004-04-09
  • 打赏
  • 举报
回复
BYTE x[] = {1, 2, 3, 4, 5, 6 };
int i = 0;
int sumA = x[i++] + x[i++] + x[i++];
i = 0;
int sumB = x[i] + x[++i] + x[++i];
i = 0;
int sumC = x[i] + x[++i] + x[(++i)++];

Q1. sumA = ?
sumB = ?
sumC = ?


++i 比 i++要快! + 在同一优先级上是两个两个进行的。

int sumA = x[i++] + x[i++] + x[i++];
==> sumA = (x[0] + x[0]) + x[0]; i++; suma = 3;


int sumB = x[i] + x[++i] + x[++i];
==> sumb = x[i] + x[++i] => i = 1 sumb(x[2]+x[2]) == 4; (x[i] + x[++i]) + x[++i]==>i = 2
==> 4 + x[2] = 3
sumb == 7;

int sumC = x[i] + x[++i] + x[(++i)++];
由于x[(++i)++]有较高优先级,所以先运行!!(注意,(x+2)++ 不具有更高优先级)
x[(++i)++] i=2; x[i] + x[++i]后,i = 3
sumc = x[3] + x[3] + x[3] = 12;
(注意:要是 x[i] + x[(++i)++] + x[++i] 与上面有差别, 因为 x[++i]将在后面编译
(x[1]+x[1]) + x[2] = 7)
其实这是看编译器的问题,可能不同编译器有不同的结果,正向“:“茴”字有四种写法”一样,我认为不是很值得研究,这些写活,可读性差,且一不小心出差!
laker_tmj 2004-04-09
  • 打赏
  • 举报
回复
up
lincony 2004-04-09
  • 打赏
  • 举报
回复
唉,孔乙己:“茴”字有四种写法,跟楼主的题目真是异曲同工啊!
ddslayers 2004-04-09
  • 打赏
  • 举报
回复
6,6,6
loseme915 2004-04-09
  • 打赏
  • 举报
回复
up
MuseIn 2004-04-09
  • 打赏
  • 举报
回复
错了。不懂
MuseIn 2004-04-09
  • 打赏
  • 举报
回复
BYTE x[] = {1, 2, 3, 4, 5, 6 };
int i = 0;
int sumA = x[i++] + x[i++] + x[i++];
i = 0;
int sumB = x[i] + x[++i] + x[++i];
i = 0;
int sumC = x[i] + x[++i] + x[(++i)++];
============================================================================
sumA = 1+1+1;
sumB = 2+2+2;
sumC = 3+3+2;

从右往左计算加法的。
MuseIn 2004-04-09
  • 打赏
  • 举报
回复
有意思
Pipi0714 2004-04-09
  • 打赏
  • 举报
回复
没有研究过,你真是天才
zhp80 2004-04-09
  • 打赏
  • 举报
回复
...
enoloo 2004-04-06
  • 打赏
  • 举报
回复
//1+1+1
//1+2+3
//2+3+3
enoloo 2004-04-06
  • 打赏
  • 举报
回复
++i 比 i++要快
加载更多回复(6)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧