在 C 中使用和不使用看似不必要的指针声明

  • 本文关键字:不必要 声明 指针 c pointers
  • 更新时间 :
  • 英文 :


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

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

最新更新