#include <stdio.h>
int sumofelements(int a[],int size)
{
int i,sum=0;
for (i=1;i<=size;i++)
{
sum+=a[i];
}
return sum;
}
int main()
{
int a[]={1,2,3,4,5};
int size=sizeof(a)/sizeof(a[0]);
int soe=sumofelements(a,size);
printf("sum of the elements=%dn",soe);
}
sumofelements
中的错误,其中for
循环如果以1开始,则会产生垃圾值。
此循环:
for (i=1;i<=size;i++)
{
sum+=a[i];
}
使用[1]、a[2]、a[3]、a[4]和[5]
此循环:
for (i=0;i<size;i++)
{
sum+=a[i];
}
使用[0]、a[1]、a[2]、a[3]和[4]
没有[5]。你忘了一个[0]。所以第二个循环给了你正确的答案,而第一个循环没有。
因为使用for
循环条件i <= size
,在循环的最后一次迭代时,您将读取超出a
指向的数组的边界,这就是程序具有未定义行为的原因。
如果您使用i < size
,这将是正确的,尽管将i
设置为1
意义不大,因为索引计数从0开始,并且您将省略一个数组元素,如果您将每个元素的所有值计算在一起,这是非常重要的。
我认为你的整个困惑是因为你可能认为第一个元素是a[1]
,但事实并非如此——它是a[0]
。
因此,正确定义sumofelements()
的唯一解决方案是:
int sumofelements(int a[],int size)
{
int i,sum=0;
for (i=0;i<size;i++)
{
sum+=a[i];
}
return sum;
}