无符号数的问题,当length为0时报错

#include
float sum(float *,unsigned);
int main(int argc, char *argv[])
{
float a[5]={1,2,3,4,5};
float t=sum(a,0);
printf("t=%f\n",t);
return 0;
}

float sum(float a[],unsigned length)
{
int i;
float sum=0;
for(i=0;i<length-1;i++)
{
sum+=a[i];
}
return sum;

不知道为什么会报错
求指点

http://codepad.org/1DtjcmGt

t=0.000000

 #include <stdio.h>
 float sum(float *,unsigned);
 int main(int argc, char *argv[])
 {
 float a[5]={1,2,3,4,5};
 float t=sum(a,0); 
 printf("t=%f\n",t);
 return 0;
 }

float sum(float a[],unsigned int length)
 {
 int i;
 float sum=0;
 for(i=0;i<(int)length-1;i++)
 {
 sum+=a[i];
 }
 return sum;
}

强制转换下就可以了,不同类型编译器给出警告。
对unsigned int作减法要特别小心,如果length是0,会下溢。

http://codepad.org/5R40FMvj

这里根本没必要减1,因为你用的是小于。

这是正确结果,15

将 unsigned int length改成int length也可以。

应该是会有个警告吧?错误是运行时候才出现的,unsigned类型的0-1是-1,当然错了