注:此问题同学们做了大量回复,并且有很多同学的解释正确并且详尽,但由于我操作不当删除了一部分回复,这里我借助调试过程做出如下解释。对同学们的回复工作进行表扬。
补全代码如下:
sum(int a[ ], unsigned len);
main()
{
int a[3]={1,2,3};
printf("%lf",sum(a,0));
}
sum(int a[ ], unsigned len)
{
int i,sum = 0;
for (i=0; i<= len-1; i++)
sum += a[i];
return sum;
}
此处main函数中定义了数组a,拥有3个元素。
调试时第12行sum累加运算处设置断点(Visual studio 中快捷键为F9),然后调试运行(Visual studio 中快捷键为F5)
进入断点后状态如下图:
如同学们所说的一样,len-1的结果为一个非常大的正数,它是232-1。此时a[0]=1,sum=0。
继续运行(F5),
此时a[1]=2,sum=1。
继续运行(F5),
此时a[2]=3,sum=3。
继续运行(F5),
此时a[3]=1245064,a[3]未赋初值,当前值不正确,sum=6,sum的值的数组a的3个素之和(1,2,3)。
删除断点(F9),继续运行(F5),
for循环4145次停止,并报告出错,出错信息可理解为a[i]访问越界。