【发布时间】:2017-08-14 21:10:50
【问题描述】:
请原谅业余爱好者,但我真的很难理解基本的递增机制。 cmets 是否正确?
#include <stdio.h>
main()
{
int a[5]={1,2,3,4,5};
int i,j,m;
i = ++a[1]; // the value of a[1] is 3. i=3
j = ++a[1]; /* because of the previous line a[1]=3
and now a[1]=4? but not in the line defining i? */
m = a[i++]; /* i retained the value of 3 even though the value of a[1] has changed
so finally i++ which is incremented in printf()? */
printf("%d, %d, %d", i,j,m);
}
我本可以回答自己的问题,但到目前为止,我在学习 C 时已经自欺欺人了好几次了。
【问题讨论】:
-
这里的问题不是很清楚 - 你观察到什么行为?
-
我认为问题是“cmets 是否正确”
-
是的,
++正在改变它的操作数。 -
pre 和 post inc/dec 运算符对它们赋予的任何左值执行。在第一种情况下,该左值是
a[1]。在第二种情况下,也是a[1]。在第三种情况下,只需i。就是这样。 -
第一个
++a[1]将a[1]从2更改为3,第二个++a[1]将a[1]从3更改为4