#include <stdio.h>
int main()
{
int i = 2;
int arr[5] = {0};
arr[++i] = i++;
for(int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
这将arr[4]
分配为3,但下标如何从2变为4?有人可以逐步评估来解释吗?
main()
的正文:int i = 2;
这相对简单。在堆栈上为main创建一个变量,并将值2写入其中。
int arr[5] = {0};
类似于以前,但是现在我们创建一个大小为5个整数的块,并为它们分配0。
arr[++i] = i++;
这是问题的根源。在这里,操作员的关联性和优先级开始起作用。查阅here以获得很好地列出规则的表格。
但是,在我们的特定情况下,我们有一个赋值运算符,其赋值为从右到左
。因此,首先评估i++
。由于i
开头为2,因此给出的答案为3。因此,赋值的右侧现在的值为3。现在我们可以看一下左侧。现在评估
我想程序的其余部分不会给您带来问题,所以我不会再讨论它。arr[++i]
。首先评估++i
,由于i
现在为3,所以++i
变为4。然后对该数组进行下标并将(3)之前的右侧值分配给arr[4]
。