这里实现的指针增量操作是什么

时间:2016-05-26 02:31:10

标签: c++

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

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

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

3 个答案:

答案 0 :(得分:5)

这一行:

*foo++ = '\0';

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

*foo = '\0';
foo = foo + 1;

答案 1 :(得分:2)

这是“访问数组元素并前进到下一个数组元素”的标准咒语。它类似于执行foo[i++]之类的迭代数组。

表达式本身解析为

*(foo++) = '\0';

foo++表示“递增foo,但在此表达式中使用其当前值”。因此,此表达式将'\0'分配给char当前指向的foo对象,并使foo前进以指向下一个元素。

答案 2 :(得分:0)

之前的答案是正确的:<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> <img id="image" src="http://static.micheljansen.org/uploads/mac-osx-arrow-cursor.png"/> <div id="drop"> </div>指向foo中的标签,因此第sStr行用NUL替换标签,并将*foo++ = '\0';前进至指向下一个角色。

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