C语言中zeichen_c-'0'得整数4作为cvorkommen数组下标的原因
底层逻辑说明
zeichen_c - '0'能直接得到整数4作为数组下标,本质是C语言字符类型的存储规则+标准强制要求共同决定的:
- 字符本质是整数编码存储
C语言里的char类型本质就是长度为1字节的整数类型,变量里存的从来不是字符的可视化形态,而是该字符在当前环境所用字符集中的编码数值。我们日常绝大多数开发环境用ASCII字符集,其中'0'的编码是十进制48,'1'是49,一直到'9'是57,10个数字字符的编码严格连续递增,相邻数字的编码差值刚好为1。 - 标准强制保证数字字符编码连续
哪怕是在不使用ASCII的极少数特殊环境下,C语言标准也明确要求:0-9这10个数字字符的编码值必须是连续、按数值顺序递增的。也就是说,用数字字符减'0'得到对应整数值的写法是跨环境兼容的标准写法,不是依赖ASCII的特殊技巧。
具体运算过程
你这段代码里的自增语句执行时,实际运算步骤是:
- 变量
zeichen_c被赋值为'4',存储的编码值是52 - 字符常量
'0'对应的编码值是48 - C语言中
char类型参与算术运算时会自动提升为int类型,因此实际计算是52 - 48 = 4,得到的结果就是标准的整型值4 - C语言对数组下标的要求就是传入整数类型,因此这个运算结果可以直接作为索引使用,不需要额外做类型转换
补充:你贴的示例代码中
cvorkommen[zeichen_c - '0']++这一行末尾缺少分号,直接编译会触发语法错误。
内容的提问来源于stack exchange,提问作者Guapi
相关产品推荐
相关产品推荐

