C 中的数组和增量运算符?

Arrays and Increment Operators in C?

这是我从某人那里得到的示例代码,它运行后给出了答案

3, 2, 15

谁能解释一下这段代码是如何工作的以及它是如何得到这些输出的?

代码:

int a[5] = { 5, 1, 15, 20, 25 };
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
_getch();

你应该知道 pre-increment (++var) 和 post-increment (var++).

让我们逐行分解代码,好吗?

  1. i = ++a[1];这里,a[1]1,(数组的第2个元素a),预增到2 并且该值存储到 i.

  2. j = a[1]++; 同样,2 存储到 j 然后 a[1] 是 post-递增到值 3.

  3. m = a[i++];a[2],即15存入mi为post-增加到 3.

  4. printf("%d, %d, %d", i, j, m); -- 惊喜!!

  1. a[1]指的是第二个元素1
  2. 在步骤i=++a[1]中,a[1]递增到2并分配给i
  3. 下一步a[1]再次递增,a[1]的值再次递增为3
  4. 在第三步,m=a[i++]i的值是第一步的2,但是是post增量。所以,m 将保持 m=a[2]

正是这样:

  • **Pre- **增量:增加变量中的值,然后使用增加的值。

  • ** Post- **增量:抓取值并使用它。 获取尚未增加的值后,增加存储在变量中的值。继续,使用之前的值。

"Operator precedence"规则的意思是,例如,++a[1]表示首先解析a[1]的含义,然后++运算符将应用于that 内存位置。第一个元素(其实就是second元素...)的值会递增,递增后的值会返回给语句使用