这段代码是什么意思?高手进

来源:百度知道 编辑:UC知道 时间:2024/09/24 09:17:56
#include<ctype.h>
double atof(char s[])
{
double val,power;
int i,sign;
for(i=0;isspace(s[i]);i++)
;
sign=(s[i]=='-'?-1:1;
if(s[i]=='+'||si]=='-')
i++;
for(val=0.0;isdigit([i]);i++)
val=10.0*val+val+(s[i]-'0');
if(s[i]=='.')
i++;
for(power=1.0;isdigit(s[i]);i++)
val=10.0*val+(s[i]-'0');
power*=10.0;
return sign*val/power;
}
中的val=10.0*val+val+(s[i]-'0');
是什么意思????????
这是一个将字符串转化为浮点数的程序,在val=10.0*val+val+(s[i]-'0');
中为什么要 -‘0’ 呢? 谢谢

入参是字符,都是ascii码,'0'是一个字符,对应到内存中的实际值可不是0而是48。所以我们真正要计算的时候会把字符值转化为实际值才行。

换为赋值语句可能更清楚。

int a;
a = 0; (a的值为0)
a = '0'; (a的值为48,''表示为一个字符)

val=10.0*val+val+(s[i]-'0');

s[i]里存的都是字符值,所以要先 -‘0’

val=10.0*val+val+(s[i]-'0');

这里的 '0' 的值是 0 对应的ascii码 : 48

也就是

val=10.0*val+val+(s[i]-48);