atoi函数,将字符串转换为呼应的整型数,看不懂啊

atoi函数,将字符串转换为相应的整型数,看不懂啊~
int atoi (char s[ ] )
{
     int  i,  n;

      n = 0;
      for(i = 0; s[ i ] >= '0' && s[i] <= ' 9 ';  ++i)
              n = 10  * n + (s[i] - '0');
       return 0;
}

这是一个将字符串转化为相应整型数的函数,请问那个n=10*n+(s[i]-'0')这个式子是什么意思?另外这样不是进行整型转化吗?直接写s[i]行吗?为什么要写(s[i]— ‘0’),或者写成(s[i]-0)这样行吗?如果不行?为什么?
------解决方案--------------------
      for(i = 0; s[ i ] >= '0' && s[i] <= ' 9 ';  ++i)
              n = 10  * n + (s[i] - '0');
这个是从高位开始转换,s[ i ] >= '0' && s[i] <= ' 9 '表示字符的ascii值在‘0’-‘9’之间,也就是说是数字。否则不转换。
n = 10  * n + (s[i] - '0');中:
s[i] - '0',才能将ascii码转换成数字。10*n是将前一次的计算结果进位。