微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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;)可以避免此问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。