数组K& R 1.6个字符?

时间:2014-04-05 20:13:07

标签: c arrays char integer

在第23页的K& R第二版中,有一些代码

    if (c >= '0' && c <= '9')
       ++ndigit[c-'0'];

继续。我的问题是,为什么整数有&#39;在每一边? 什么是c - &#39; 0&#39;?

3 个答案:

答案 0 :(得分:2)

'0'是一个角色。它具有整数值48. '9'具有值57. c - '0'的值等于c - 48,并且将是相应字符的整数值。 '0'将为0'1'将为1等。

答案 1 :(得分:1)

'0'char,即一个角色。每个字符在内部由整数表示。见ASCII。例如,'0'具有整数值48

答案 2 :(得分:1)

代码的目的是将字符 '0'...'9'转换为相应的整数0...9。 C 保证表示十进制数字的字符具有任何特定值,但确实保证它们是连续的并且顺序正确。上面的减法将始终为您提供正确的整数值。

对于C中的任何其他角色,没有类似的保证。

参考

ISO 9899:1999标准(又名C99)说:

  

执行字符集的成员值是实现定义的。 ...

     

所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中;它用于终止字符串。 ...

     

上述十进制数字列表中0后的每个字符的值应大于前一个值。

N1570中找到了完全相同的措辞,这是当前标准(C11)的最终公开草案。

关于角色的价值或关系,没有其他说法。