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

关于character pointer中Post increment operator的代码行为等价性问询

关于C语言中后置自增运算符与指针操作的代码等价性问题

变量定义

首先明确我们讨论的变量定义:

char *s;

待分析的原代码

我们需要分析其行为的代码如下:

while ( *s )
  if ( *s++ == ' ' )
    break;

修正后的对比选项

最初给出的选项存在语法错误(多写了不必要的*运算符),修正后的正确选项如下:

选项1

while ( *s ) {
  if ( *s == ' ' ) {
    s++;
    break;
  }
  s++;
}

选项2

while ( *s ) {
  s++;
  if ( *s == ' ' )
    break;
}

核心疑问

本质是要明确:指针自增操作s++是在if的字符比较判断之前还是之后执行?

等价性结论

原代码中*s++ == ' '的执行顺序是固定的:

  1. 先解引用当前指针s,获取指向的字符;
  2. 执行s++,将指针向后移动一位;
  3. 把第一步获取的字符和' '比较,若相等则执行break跳出循环。

对照修正后的选项:

  • 选项1与原代码完全等价:它先检查当前指针指向的字符是否为空格,若是则自增指针后跳出;若不是则自增指针后进入下一轮循环,和原代码的执行逻辑完全一致。
  • 选项2逻辑错误:它先自增指针,再检查新位置的字符是否为空格,和原代码的判断时机完全相反。

另外你理解的这段代码也和原代码等价:

char *s;
char c;

while ( *s ) {
  c = *s++;
  if ( c == ' ' )
    break;
}

这段代码只是把*s++的结果存入临时变量c再做比较,执行逻辑和原代码没有区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:35:36