在C中使用和不使用看似不必要的指针声明
我有一段代码,其中我使用指针计算整数数组的和:在C中使用和不使用看似不必要的指针声明,c,pointers,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 exercise1c(无效){ int arr[]={12,7,-3,4,1};
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 exercise1c(无效){
int arr[]={12,7,-3,4,1};
int*numb=arr;
int i;
整数和;
而(i您使用未初始化的非静态局部变量int sum;
的值调用了未定义的行为,该值是不确定的
然后,删除行似乎在某种程度上影响了编译器的优化过程
初始化变量(例如,int-sum=0;
)以避免问题。初始化sum
…int-sum=0;
,注意溢出。顺便说一句:sum+=*(arr+i);
也可以写成sum+=arr[i];
…在我看来,只能写成arr[i]
…一般规则:如果删除不相关的代码会改变程序的行为,这强烈表明程序调用了未定义的行为。在使用局部变量之前,需要初始化它们。打开编译器警告(使用选项-Wall-Wextra-Werror
和gcc或clang)编译器会提醒你这一点。在你的代码中,你需要初始化sum
和i
。