C 在数组中分配错误的索引

C assignes wrong index in array

我有密码

#include <stdio.h>
int main(){
    int y [10]; int i = 1;
    y[i] = i++;
    printf("y0: %d\n", y[0] );
    printf("y1: %d\n", y[1] );
    printf("y2: %d\n", y[2] );
}

我认为那行

y[i] = i++; 

应该作为 y[1] = 1;然后将 i 设置为 2;

但是 y[1] 有一些随机值并且 y[2] 设置为 1。为什么?

您处于未定义行为的范围内。在某些编译器上可能有效,在其他编译器上可能无效。

问题是在行

y[i] = i++;

i 被求值两次,你不能假设它是赋值之前还是之后的表达式。

如果先对 i++ 求值,则表达式结果变为 1。但它会在 y[i] 求值之前递增。所以 i == 2 然后创建 y[2] = 1 的结果; 如果赋值前的 i 先被求值然后结果变成 y[1] = 1;我++;

将其更改为当然可以解决此问题:

y[i] = i;
i++;

需要使用循环来更新'y'值

// for loop execution
for( int i = 0; i <= 2; i++ )
{
    y[i] = i;
}
printf("y0: %d\n", y[0] );
printf("y1: %d\n", y[1] );
printf("y2: %d\n", y[2] );