为什么下面的代码打印垃圾值?

我不明白为什么下面的代码打印垃圾值

#include <stdio.h> 

void main(){
 int arr[5],i=0;
 while(i<5)
    arr[i]=++i;
for(i=0;i<5;i++)
    printf("%d",arr[i]);
 }
guashehdh 回答:为什么下面的代码打印垃圾值?

声明

arr[i]=++i;

等效于

i = i + 1;
arr[i] = i;

这意味着您将不会初始化数组中的第一个元素(在索引0处)。更糟糕的是,您也将在索引5上进行写操作,这超出了 的范围,并会导致未定义的行为

未初始化的局部变量将具有一个 indeterminate 值,该值可能被视为随机或垃圾。

我建议您也有一个for循环,就像用于打印初始化值的循环一样。

for (i = 0; i < 5; ++i)
    arr[i] = i + 1;
,

在您同时读写BeforeMethod时,表达式arr[i] = ++i未定义

i不是排序点,因此您不能假设在获取=的索引之前先增加i

即使 arr在获取i的索引之前已经增加(因为某些语言(例如C ++ 17)要求这样做,程序的行为也是如此)由于超出范围的数组访问,仍将是未定义的。

本文链接:https://www.f2er.com/2599203.html

大家都在问