后置增量运算符,左侧,字符指针

问题描述 投票:0回答:2

考虑变量

s
定义如下:

CHAR *s;

我试图理解以下代码的行为:

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

这相当于下面的(选项1)吗?

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

或者,它是否等同于下面的(选项2)?

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

我试图理解赋值语句左侧

++
运算符的定义行为。

c pointers
2个回答
0
投票

它不等同于您的任何一个变体。更像是

while (s[0] != '\0')
{
    // Save the current pointer
    char *orig_pointer = s;

    // Increase the pointer, making it point to the next character
    s = s + 1;

    // Compare the character pointed to by the original pointer
    if (orig_pointer[0] == ' ')
    {
        break;
    }
}

0
投票
  1. CHAR *
    =>
    char *
  2. *s++
    =>
    s++
    因为
    *s++
    在取消引用指针后递增指针(在本例中是无操作。此操作的想法是递增指针。
  3. 它并不等同于您发布的任何代码。它是:
while ( *s )
{
  if ( *s == ' ' ) {s++; break;}
  s++;
}
© www.soinside.com 2019 - 2024. All rights reserved.