arrays - 如何在该特定索引的数组中分配值?
问题描述
当我运行以下代码时,我得到输出: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;
}
解决方案
var[++count]=++count;
根据 C17 标准 6.5.2,该语句会引发未定义的行为:
如果标量对象上的副作用相对于同一标量对象上的不同副作用或使用相同标量对象的值的值计算是未排序的,则行为未定义。如果一个表达式的子表达式有多个允许的排序,则如果在任何排序中出现这种未排序的副作用,则行为未定义。)
因此,对于每个唯一变量,它认为如果它是预先递增的,那么它的值可能不会在该表达式的其他地方使用。结果将是变量首先递增,然后在表达式中使用其递增的值。
该代码在技术上是未定义的行为。在实践中(可能)发生了什么,它count
被增加了两次,然后同时用作索引和值。
推荐阅读
- python - 类型错误:edit_undo() 接受 1 个位置参数,但给出了 2 个
- java - Java 14 中的 Lambda 表达式和“?:”运算符
- python - Pygame Sprite 在移动时会留下痕迹
- javascript - 使用 ES lint 错误希望在不禁用它或更改规则的情况下解决
- azure - azure webapp 您无权查看此目录或页面
- amazon-web-services - AWS SES 允许跟踪邮件是否发送或失败
- python - CI / CD管道的Postgresql数据库错误
- reactjs - 从反应上传图像到laravel api
- c - 您如何理解驻留在特定堆栈/函数中的局部变量地址的差异?
- php - 在查询中搜索没有 UTF-8 字母的 UTF-8 通道