这个指针增量操作在这里实现了什么



我正在查看一些如下所示的C++代码:

char* foo = strchr(sStr, 't');
if (foo)
{
  *foo++ = '';
  /* more code */
}

我假设不需要更多上下文 - 我知道第一行是初始化指向sStr中第一次出现的指针。不过,我不完全确定*foo++ = '';在做什么。

这一行:

*foo++ = '';

foo指向的字符设置为值''(空字符),然后移动指针,使其指向下一个字符。它相当于:

*foo = '';
foo = foo + 1;

这是"访问数组元素并前进到下一个数组元素"的标准咒语。它直接类似于执行类似foo[i++]来迭代数组的操作。

表达式本身解析为

*(foo++) = '';

foo++的意思是"增量 foo,但在此表达式中使用其当前值"。因此,此表达式将''分配给foo当前指向的char对象,并foo前进以指向下一个元素。

前面的答案是正确的:foo指向sStr中的制表符,因此该行*foo++ = '';用 NUL 替换制表符,并foo前进以指向下一个字符。

这样做的原因是将一行文本解析为制表符分隔的字段。 如果/* more code */没有这样做,我会感到惊讶(记录指向字段开头的指针,并通过用 NUL 替换制表符来分隔它们。

最新更新