在C中有和没有看似不必要的指针声明

问题描述

我有这段代码,其中我使用指针计算整数数组的总和:

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;)可以避免此问题。