当把一个变量i定义为无符号类型时,若i的初值为0,则执行i-1后,得到的结果就是大于0的数,而不是-1.
当把两个变量x和y定义为无符号类型时,若0<x<y,则x-y的结果也是一个大于0的数,而不是一个小于0的数。
源程序
#include "string.h"
#define N 5
float sum_elements(float a[],unsigned int length);
int strloner(char *s,char *t);
void main()
{
float ren;
float c[N]={ 1.1, 2.3, 3.4, 4.5, 5.6 };
int res;
char d[]="abcdef1";
char e[]="abcdef123";
ren=sum_elements(c,N);
res=strloner(d,e);
}
float sum_elements(float a[],unsigned int length)
{
//unsigned int i;错误类型
int i; //正确定义类型
float result=0;
for(i=length-1;i>=0;i--)
result+=a[i];
return result;
}
int strloner(char *s,char *t)
{
return strlen(s)>strlen(t); //正确语句
//return strlen(s)-strlen(t)>0;错误的语句
}
对于函数sum_elements(),若把局部变量i定义为unsigned int,则数组a[]就会越界,计算结果错误。需要把变量i定义为 int。
对于函数strlen(),因为调用strlen(s)会得到unsigned int值,两个unsigned int值做差就不可能得到负数,当s串比t串短的时候,也会返回1。