c语言表达式(j=3,j++)是什么意思

 我来答
ebdhfaf
2011-06-11 · TA获得超过1288个赞
知道小有建树答主
回答量:1181
采纳率:0%
帮助的人:192万
展开全部
j++是j自增,不参与表达式的计算。
而++j则是将j先自增后再参与表达式计算。
如表达式(++j)+j
如开开始j=3,那么先自增1,j=4,并且后面的j也按4算
表达式的值为8

给你看个详细的别人的解释:
1.对++j的处理分两种情况,一种是在表达式进行运算之前就将++j计算,然后再进行表达式运算;第二种是在表达式运算的过程当中进行++j自增并计算表达式的值。
2.两种情况对j++的处理方式一样,都是表达式运算完成后自增,所以j++对表达式的运算无影响。

第一种情况:
就TC来说,他是第一种,先把++j进行自增,然后再进行加法运算,而不管++j出现的顺序,比如:

m+=(j++)+(++j)+(j++);

有一个++j,所以先将j自增一次,假设j = 2,自增一次后为3,最后的运算就是:

m += 3 + 3 + 3;

而不是
m += 2 + 3 + 4, 虽然结果都是m += 9
你试着把他们的顺序换一下:
m+=(j++)+(j++)+(++j);
++j换到了后面,结果仍然是3+3+3,而不是2+2+3,

再如:
m+=(j++)+(++j)+(j++)+(++j);
++j出现了2次,那么先将j自增两次,为4,表达等价于:
m+= 4 + 4 + 4 + 4;
而不是
m+=2+3+2+3;

看下这个表达式的汇编:
1 inc si ;自增j
2 inc si
3 mov ax,si ;加法运算
4 add ax,si
5 add ax,si
6 add ax,si
7 add di,ax
8 inc si ;自增j
9 inc si

第1行和第2行是将++j自增,3到7行是加法运算。8、9行是j++的自增,不参与表达式的运算。

所以使用这种编译方式的编译器,++j的位置对结果无影响。

第二种情况:
VC、dev c,好像gcc也是这种情况,他是在运算过程中对++j进行运算。所以++j的位置对结果有影响。

其中VC的还比较奇特,比如
m=(j++)+(++j)+(++j)+(j++)+(j++);
的汇编:
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax ++j;
mov ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov edx, DWORD PTR _j$[ebp]
add edx, 1
mov DWORD PTR _j$[ebp], edx ++j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov DWORD PTR _m$[ebp], ecx

结果是
m = 3 + 3 + 4 + 4 + 4 = 18
但是将其中一个++j调换顺序:
m=(j++)+(++j)+(j++)+(++j)+(j++);
结果是:
m = 3 + 3 + 3 + 4 + 4 = 17

但是
m = (j++)+(j++)+(++j)+(++j)+(j++)+(j++);
结果却是
m = 2 + 2 + 3 + 4 + 4 + 4 = 19

就是说前面两个在第二个++j之前都提前进行了++j,而第三个表达式没有。

总之比较奇特,跟VC编译器代码优化什么的有关系。而且你将VC6的编译改成release,上面第三个表达式的结果就是
m = 4 + 4 + 4 + 4 + 4 + 4 = 24,不是19了!
caofeifei152
2011-06-07
知道答主
回答量:11
采纳率:0%
帮助的人:7.4万
展开全部
这个是括号表达式。计算结果是3。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-04
展开全部
j为3,然后j每次累加1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1601b749d
2011-06-04 · 超过10用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:27.9万
展开全部
marsding2006 正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
marsding2006
推荐于2017-11-24 · TA获得超过4627个赞
知道大有可为答主
回答量:3090
采纳率:40%
帮助的人:1284万
展开全部
对于逗号表达式,其整个表达式的值为最后一个表达式的值,所以(j=3,j++)表达式的值最后就是j++的值,因为j++是先返回j的值然后j累加1,所以最后(j=3,j++)的值是3,但是j是4。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式