2.8 自增运算符与自减运算符

Increment and Decrement Operators(递增和递减操作符):

  • ++ : Increment(递增)

  • -- : Decrement(递减)

前缀(prefix)使用与后缀(postfix)使用,有一些差别。

++i;
i++;
  • 前缀,立即自增,其副作用是自增 i

  • 后缀,先用 i 的原始值,稍后再自增 i

如下是在字符串 s 中删除字符 c

squeeze-function.c
void squeeze(char s[], int c)
{
    int i,j;
    for (i=j=0; s[i] != '\0'; i++) 
    {
        if (s[j] != c) 
        {
            s[j++] = s[i];
        }
        s[j] = '\0\;
    }
}

先拷贝再递增,如下两个写法等价。

if (s[j] != c) 
{
    s[j++] = s[i];
}
if (s[j] != c) 
{
    s[j] = s[i];
    j++;
}

这里要提到几个术语:

  • 由实现定义的行为 implementation-defined,c标准故意对c语言的部分内容未加指定,并认为其细节可以由“实现”来具体定义。

  • 未定义行为 undefined behavior,其后果是不可预料的,要尽力避免。

  • 副作用 side effect,大多数c语言运算符不会改变操作数的值,但是也有一些会改变。

Last updated