有人能解释数组数[3]和数字[6]的值在以下c代码?

  • 本文关键字:代码 数字 数组 能解释 arrays c
  • 更新时间 :
  • 英文 :


使用数组的示例程序在这里,我们需要找到代码的最终输出,但我不能得到与编译器得到的相同的输出。我得到错误的输出数字[3]和数字[6]。

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int numbers[10];
int i, index = 2;
for (i = 0; i < 10; i++)
numbers[i] = i * 10;
numbers[8] = 25;
numbers[5] = numbers[9] / 3;
numbers[4] += numbers[2] / numbers[1];
numbers[index] = 5;
++numbers[index];
numbers[numbers[index++]] = 100;
numbers[index] = numbers[numbers[index + 1] / 7]--;
for (index = 0; index < 10; index++)
printf("numbers[ %d ] = %dn", index, numbers[index]);
return 0;
}
  1. 最简单的方法是在调试器中显示indexnumbers的值,然后执行每一行,直到您感到惊讶。如果你的调试器支持它,你也可以反向运行你的程序。
  2. 你可以用一个函数来修改你的程序,打印出indexnumbers,然后在每次有重大变化后运行这个函数。
  3. 如果你想手动操作,你可以用手反过来推理程序。从程序的输出中:
numbers[ 3 ] = 100
numbers[ 6 ] = 99

让我们从最后一个赋值开始:

numbers[ index ] = numbers[ numbers[ index + 1 ] / 7 ]-- =>
numbers[3] = numbers[numbers[4] / 7]-- =>
= numbers[(40 + 20 / 10) / 7 ]-- =>
= numbers[6]--

作为index = 3,从2int i, index = 2集合的初始值在numbers[ numbers[ index++ ] ] = 100;上的后增量。numbers[ 4 ] += numbers[ 2 ] / numbers[ 1 ];,它只使用在循环中设置的初始值numbers[ i ] = i * 10.

从输出中我们知道,numbers[3]将赋值100numbers[6]减为99。我们唯一赋值100的地方是前一行numbers[ numbers[ index++ ] ] = 100,所以我们只需要让自己确信左边是numbers[6]:

numbers[ numbers[ index++ ] ]  =>
numbers[numbers[2]] =>
numbers[6]

作为上面讨论的初始赋值的index = 2,numbers[2] = 6来自++numbers[ index ],来自5numbers[ index ] = 5;集合的上一个值。

这个故事的寓意是更喜欢单一的任务:-)

所有的奇迹都发生在最后两行:

numbers[numbers[index++]] = 100;
numbers[index] = numbers[numbers[index + 1] / 7]--;

我建议您使用调试器并将numbers[3]numbers[6]添加到watcher。然后在numbers[numbers[index++]] = 100;行设置一个断点。

数量[6]

  1. index是2,所以numbers[index++]会给6由于这两行
numbers[index] = 5; // numbers[2] = 5
++numbers[index]; // numbers[2] = 5 + 1 = 6
  1. 现在,numbers[numbers[index++]] = 100;将变成numbers[6] = 100;
  2. 现在,index++将执行,使其成为3
  3. 因此,numbers[6]现在是100

数字[3]

  1. 现在解码这一行:
numbers[index] = numbers[numbers[index + 1] / 7]--;
  1. index现在是3,所以numbers[index + 1]等于numbers[4],等于42,除以7等于6
  2. 现在,numbers[3] = numbers[6] = 100
  3. numbers[3]变为100后,numbers[6]将由于后减运算符--
  4. 而减少1
  5. 因此numbers[3] = 100numbers[6] = 99

相关内容

最新更新