繁体   English   中英

数组K&R 1.6个字符?

[英]Arrays K&R 1.6 chars?

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

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

继续 我的问题是,为什么整数的两边都有'? 什么是c-'0'?

'0'是一个字符。 它具有整数值48 '9'具有值57的值c - '0'等于c - 48 ,并且将对应的字符的整数值。 '0'将是0'1'将是1 ,依此类推。

'0'是一个char ,即一个字符。 每个字符在内部都由整数表示。 参见ASCII 例如, '0'的整数值为48

该代码的目的是将字符 '0'...'9'转换为相应的数值0...9 C 保证代表的小数位的字符有什么特别的价值,但它确实保证它们是连续的,并以正确的顺序。 上面的减法将始终为您提供正确的整数值。

C中的任何其他字符都没有类似的保证。

参考

ISO 9899:1999标准(aka C99)表示:

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

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

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

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

关于字符的值或字符之间的关系,没有多说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM