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

标签 c arrays variables increment

我有一个代码

#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++;

关于C 在数组中分配错误的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998791/

相关文章:

mysql - 用户变量给出 session 中最后分配的值

c - 使用 C 中的 realloc() 函数增加二维数组中的列

c - 来自 gdk_window_get_frame_clock 的 SIGABRT 信号

创建一个包含 n 个子流程的链

.net - 在 C# 中调用 C 函数并获取字符串输出

java - 将偶数字符改为大写,但跳过空格

arrays - OCaml 中用于跟踪游戏板的数据结构

java - Android创建和使用全局变量的简单方法?

c - 在 C 中使用变量声明多个结构体

javascript - 通过 &lt;style&gt; 在 CSS 中使用 JavaScript 函数