You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言arr[str[i]]++实现字符计数原理及循环中内存运行机制疑问

arr[str[i]]++ 统计逻辑说明

这行代码的核心是利用了C语言中char类型的整数本质:

  • 每个字符默认对应0~255范围内的ASCII编码值,刚好和你定义的长度为256的arr数组下标范围完全匹配
  • 数组arr初始化全为0,相当于每个ASCII字符的初始计数都为0
  • 代码前置的if判断排除了空格和逗号,只有其他字符会进入计数逻辑

执行统计时逻辑非常直接:

  1. 取当前遍历到的字符str[i],直接用它的ASCII编码值作为数组下标,比如小写t的ASCII值是116,就对应arr[116],大写T的ASCII值是84,对应arr[84]
  2. 对该下标的数组元素做自增操作,等同于该字符的出现次数+1

你给出的测试字符串里有3组小写test和3组大写TEST,刚好对应输出里小写t出现6次、e出现3次、s出现3次,大写T出现6次、E出现3次、S出现3次的结果,大小写分开统计是因为二者ASCII值不同,对应数组不同下标的计数器。


执行时的内存操作细节

每次运行arr[str[i]]++时,内存层面会依次执行三个动作:

  • 首先读取str[i]对应内存地址存储的1字节字符值,转换为int类型的ASCII编码值
  • 以arr数组的首地址为基准,偏移「ASCII值 × int类型占用字节数」的长度,定位到对应数组元素的内存地址
  • 读取该地址存储的当前计数数值,加1后重新写回该内存地址

内容的提问来源于stack exchange,提问作者vbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:27:03