以下程序的输出不应该是 -
而是显示2 3 20
3 2 15
有谁可以解释这背后的原因?
#include<stdio.h>
main()
{
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);
}
答案 0 :(得分:7)
3 2 15
是正确的输出。
i
为3,因为i
在i = ++a[1];
中变为2,用于预增量,然后在m = a[i++];
j
为2,因为j = a[1]++;
,之后没有变化。m
为15,因为m = a[i++];
i
正在递增,i
的旧值(2
)用于索引和在评估i
声明后,=
的后增量已排序。话虽如此,main()
的推荐签名为int main(int argc, char *argv[])
或至少为int main(void)
。
答案 1 :(得分:2)
此时,变量值为:
a = {5,1,15,20,25};
i = uninitialized
j = uninitialized
m = uninitialized
现在,
i = ++a[1];
获取a[i]
的值,该值为1,递增,然后变为2,然后将其存储在i
中。
此时,变量值为:
a = {5,2,15,20,25};
i = 2
j = uninitialized
m = uninitialized
接下来,
j = a[1]++;
获取a[1]
中的值2(因为它在前一个语句中递增),将此值存储在j
中,然后递增a[1]
中存储的值。 / p>
此时,变量值为:
a = {5,3,15,20,25};
i = 2
j = 2
m = uninitialized
然后,
m = a[i++];
获取a[i]
(a[2]
以来i
当前为2)的值,即15,此值存储在m
中。然后,i
递增。
此时,变量值为:
a = {5,3,15,20,25};
i = 3
j = 2
m = 15
答案 2 :(得分:1)
3 2 15 is correct
#include<stdio.h>
main()
{
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);
}
现在让我们一行一行假设i,j,m等于0 {更好地初始化}
来自第3行,i = ++a[1];
i = 2 as(++ pre increment,change then use,a [1] = 1 so i = 2)
来自第4行,j = a[1]++;
j = 2 as(++这里是后增量,使用然后改变,a [1]变为3但j等于2)
来自第5行,m = a[i++];
i = 2 by line 3,这里++ post increment然后我将增加到3但是会使用[2]。
因此i = 3,j = 2,m = 15
希望你明白了..........