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++
).
让我们逐行分解代码,好吗?
i = ++a[1];
这里,a[1]
是1
,(数组的第2个元素a
),预增到2
并且该值存储到 i
.
j = a[1]++;
同样,2
存储到 j
然后 a[1]
是 post-递增到值 3
.
m = a[i++];
a[2]
,即15
存入m
,i
为post-增加到 3
.
printf("%d, %d, %d", i, j, m);
-- 惊喜!!
a[1]
指的是第二个元素1
- 在步骤
i=++a[1]
中,a[1]
递增到2
并分配给i
- 下一步
a[1]
再次递增,a[1]
的值再次递增为3
- 在第三步,
m=a[i++]
,i
的值是第一步的2
,但是是post增量。所以,m
将保持 m=a[2]
正是这样:
**Pre- **增量:增加变量中的值,然后使用增加的值。
** Post- **增量:抓取值并使用它。 获取尚未增加的值后,增加存储在变量中的值。继续,使用之前的值。
"Operator precedence"规则的意思是,例如,++a[1]
表示首先解析a[1]
的含义,然后++
运算符将应用于that 内存位置。第一个元素(其实就是second元素...)的值会递增,递增后的值会返回给语句使用
这是我从某人那里得到的示例代码,它运行后给出了答案
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++
).
让我们逐行分解代码,好吗?
i = ++a[1];
这里,a[1]
是1
,(数组的第2个元素a
),预增到2
并且该值存储到i
.j = a[1]++;
同样,2
存储到j
然后a[1]
是 post-递增到值3
.m = a[i++];
a[2]
,即15
存入m
,i
为post-增加到3
.printf("%d, %d, %d", i, j, m);
-- 惊喜!!
a[1]
指的是第二个元素1
- 在步骤
i=++a[1]
中,a[1]
递增到2
并分配给i
- 下一步
a[1]
再次递增,a[1]
的值再次递增为3
- 在第三步,
m=a[i++]
,i
的值是第一步的2
,但是是post增量。所以,m
将保持m=a[2]
正是这样:
**Pre- **增量:增加变量中的值,然后使用增加的值。
** Post- **增量:抓取值并使用它。 获取尚未增加的值后,增加存储在变量中的值。继续,使用之前的值。
"Operator precedence"规则的意思是,例如,++a[1]
表示首先解析a[1]
的含义,然后++
运算符将应用于that 内存位置。第一个元素(其实就是second元素...)的值会递增,递增后的值会返回给语句使用