我有这段代码,我使用指针计算整数数组的总和:
int exercise1c (void){
int arr[] = {12, 7, -3, 4, 1};
int *numb = arr;
int i;
int sum;
while (i<5){
sum += *(arr + i);
i++;
}
printf("%d", sum);
return 0;
}
但是,我注意到 int*numb = arr;
行并没有真正在任何地方使用。所以我尝试删除它,这会导致一个非常奇怪的随机数(如15775252)。谁能向我解释为什么删除该行会导致此问题?
您使用未初始化的非静态局部变量的值调用了未定义的行为int sum;
,这是不确定的。
然后,删除该行似乎以某种方式影响了编译器的优化过程。
初始化变量(例如,int sum = 0;
)以避免此问题。