首页 > 解决方案 > 如何在该特定索引的数组中分配值?

问题描述

当我运行以下代码时,我得到输出:0 0 2 0 0

int main(){

    static int var[5];
    int count=0;
     
    var[++count]=++count;
    for(count=0;count<5;count++)
    { 
      printf("%d ",var[count]);
    }
    return 0;
}

标签: arrayscassignment-operatorpre-increment

解决方案


var[++count]=++count;根据 C17 标准 6.5.2,该语句会引发未定义的行为:

如果标量对象上的副作用相对于同一标量对象上的不同副作用或使用相同标量对象的值的值计算是未排序的,则行为未定义。如果一个表达式的子表达式有多个允许的排序,则如果在任何排序中出现这种未排序的副作用,则行为未定义。)

因此,对于每个唯一变量,它认为如果它是预先递增的,那么它的值可能不会在该表达式的其他地方使用。结果将是变量首先递增然后在表达式中使用其递增的值。

该代码在技术上是未定义的行为。在实践中(可能)发生了什么,它count被增加了两次,然后同时用作索引和值。


推荐阅读