得到了正确答案,但不知道如何或为什么。需要解释

时间:2016-05-19 09:53:23

标签: c arrays

我最近做了一次考试并且有一个奖金问题,我是唯一一个正确的人。我和我的同学一样对我如何做得很好奇。

问题是: 使用此数组:int a[5] = {5, 1, 15, 20, 25};

使用以下变量:int i, j, m;

使用此基本代码:

i = /*Enter Code*/;
j = /*Enter Code*/;
m = /*Enter Code*/;
printf("%d, %d, %d", i, j, m);

获得此答案:3, 2, 15

有很多条件,但主要是我们只允许使用数组,每个变量一个'1'和一个'++'等于。

我通过反复试验得到了答案,但我不知道我是如何做对的以及它是如何做对的。这是我的代码:

int 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);
   _getch();
   return 0;
}

我纯粹很好奇我是如何得到正确答案的。任何解释都会很棒。

提前致谢。

2 个答案:

答案 0 :(得分:1)

所以,看看这三个陈述:

i = ++a[1];

这会将a[1]更改为2,并将该值分配给i

j = a[1]++;

这会将j设置为2,并将a[1]更改为3

m = a[i++];

这会将m设置为15,并将i更改为3

所以打印所需的最终值3, 2, 15

如果你在调试器中运行它,你可以看到所有的变量并按语句看它发生。

答案 1 :(得分:1)

就像所有人说的那样,只需使用调试器或手动执行代码:

开头

a[5] = {5, 1, 15, 20, 25}
i = ++a[1];

之后

a[5] = {5, 2, 15, 20, 25}
i = 2

因为预增量++会在影响他之前修改[1]。

j = a[1]++;

之后

a[5] = {5, 3, 15, 20, 25}
i = 2
j = 2

因为后增量++会在影响到j之后修改[1]。

m = a[i++];

之后

a[5] = {5, 3, 15, 20, 25}
i = 3
j = 2
m = 15

因为后期增量会将做法后的i值修改为m,所以在做作时,我将等于2,其中a [2] = 15。

你需要理解++ a和a ++之间的区别(当两次增量发生时)。