新手求教i++问题

superjgw 2009-09-27 12:55:32
main()
{ int j=3,k;
k=(j++)*(++j)+(j--)*(--j);
printf("k=%d",k);
}
k等于几?30吗
为什么vc++和tc中运行结果不一样,而且都不是30 迷糊了!!!
...全文
428 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjip267 2009-10-13
  • 打赏
  • 举报
回复
int j=3,k;
k=(j++)*(++j)+(j--)*(--j);
k= 3*5+5*3
k=30
XyRbj 2009-10-13
  • 打赏
  • 举报
回复
取决于编译器。哥们 太极端了
BBiceway 2009-10-10
  • 打赏
  • 举报
回复
18
弘石 2009-10-10
  • 打赏
  • 举报
回复
理论上应该是30
aaron0211 2009-10-10
  • 打赏
  • 举报
回复
编译器的问题,听说 用Dev C++编译的结果是30的。
准确结果,我认为应该是30.
olncy 2009-10-10
  • 打赏
  • 举报
回复
我在vc的编译器下那个表达式翻译汇编成如下:(用伪代码表示)

表达式: k=(j++)*(++j)+(j--)*(--j);

伪代码:
j+=1;
j-=1;
tempA=j*j;
tempB=j*j;
k=tempA+tempB;
j-=1;
j+=1;

所以结果为: k==18

不知道TC生成的结果是怎么样的,有那位同学贴一下
aduadd 2009-10-10
  • 打赏
  • 举报
回复
慎用 ++
leonyu102 2009-10-10
  • 打赏
  • 举报
回复
4*4+3*3 = 25
可能和编译器有关
xiangweixing 2009-10-09
  • 打赏
  • 举报
回复
路过
shiweifu 2009-10-09
  • 打赏
  • 举报
回复
。。又见日经贴。。
hyd1314 2009-10-09
  • 打赏
  • 举报
回复
这个k=(j++)*(++j)+(j--)*(--j);
容易出错
书上有介绍啊
理论上应该是30
flyerwing 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 z782282738 的回复:]
结果是18。
第一个j++是3,++j是4。3*4=12
j--是3,  --j是2。    3*2=6
12+6=18。
[/Quote]
就是18!
boyfromhuizhou 2009-10-09
  • 打赏
  • 举报
回复
真是很sorry!应该这样,这样等于30 但我也说不清为什么等于25
#include<stdio.h>
int Test1(int*p) //j++函数
{
int i=*p;
(*p)++;
printf("计算j++,j=%d\n",*p);
return i;
}
int Test2(int*p) //++j
{
(*p)++;
printf("计算++j,j=%d\n",*p);
return *p;
}
int Test3(int *p) //j--函数
{
int i=*p;
(*p)--;
printf("计算j--,j=%d\n",*p);
return i;
}
int Test4(int *p) //--j
{
(*p)--;
printf("计算--j,j=%d\n",*p);
return *p;
}
void main()
{ int j=3,k;
k=(Test1(&j))*(Test2(&j))+(Test3(&j))*(Test4(&j));
printf("k=%d",k);
}
boyfromhuizhou 2009-10-09
  • 打赏
  • 举报
回复
提供某自己的方法:
#include<stdio.h>
int Test1(int j) //j++函数
{
int i=j;
j++;
printf("计算j++,j=%d\n",j);
return i;
}
int Test2(int j) //++j
{
j++;
printf("计算++j,j=%d\n",j);
return j;
}
int Test3(int j) //j--函数
{
int i=j;
j--;
printf("计算j--,j=%d\n",j);
return i;
}
int Test4(int j) //--j
{
j--;
printf("计算--j,j=%d\n",j);
return j;
}
void main()
{ int j=3,k;
k=(Test1(j))*(Test2(j))+(Test3(j))*(Test4(j));
printf("k=%d",k);
}
在VC下测试。不过这样得到的是18 不是25 我也不知道为什么
lbx2003 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 z782282738 的回复:]
结果是18。
第一个j++是3,++j是4。3*4=12
j--是3,  --j是2。    3*2=6
12+6=18。
[/Quote]
我同意这个,呵呵
kaso 2009-10-09
  • 打赏
  • 举报
回复
更或者:k=4*5+4*3=32???
kaso 2009-10-09
  • 打赏
  • 举报
回复
k=3*5+5*4???
kaso 2009-10-09
  • 打赏
  • 举报
回复
k=3*4+3*2=18????
aaron0211 2009-10-09
  • 打赏
  • 举报
回复
j的值为3,上面打错了。
aaron0211 2009-10-09
  • 打赏
  • 举报
回复
最后i的值是3,不明白为什么k的值为25 ?
加载更多回复(34)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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