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

C语言对指针使用后置自增不生效但加等于赋值正常,是什么原因?

问题原因分析

核心是C语言的运算符优先级规则导致的逻辑不符合预期:

  • 后置自增运算符++的优先级高于指针解引用运算符*,所以你写的*pCharCount++不会按照你预想的「先取指针指向的数值,再给这个数值加1」执行,实际等价于*(pCharCount++),执行顺序为:
    1. 先记录pCharCount当前存储的内存地址
    2. 将pCharCount指针本身的值加1,也就是让指针指向了下一个int类型长度的内存地址,这已经不是你原本传入的计数变量的地址了
    3. 最后对第一步记录的原始地址做解引用,但这个操作没有任何赋值逻辑,完全不会修改原本的计数变量
      所以这个写法不仅没完成计数加1的需求,还把指针的指向改乱了,后续所有操作都会访问错误的内存地址,自然无法得到正确结果。
正确写法说明

你用的*pCharCount += 1是符合需求的,因为*优先级高于+=,会先解引用拿到指针指向的计数变量,再给变量值加1。
如果你想用自增语法实现同样的效果,只需要加括号调整优先级即可:

(*pCharCount)++; // 先解引用拿到计数变量,再对变量做自增
(*pWordCount)++;
补充说明

另外你当前的单词计数逻辑存在缺陷:连续出现多个空白符、文件首尾存在空白符的场景下,会出现计数错误,你可以后续调整判断逻辑,只在「当前字符是非空白符,且前一个字符是空白符/文件起始」的时候才给单词计数加1,统计结果会更准确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:03