*char_ptr++ -= 0x20
为什么那个表达式只增加一次指针这个表达式可以分解为
*char_ptr++ = *char_ptr++ - 0x20
这意味着指针必须递增两次。第一次在右边,第二次在左边。但这只增加了一次。
这个表达式是下面函数的一部分

void to_lower_case(char *char_ptr)
{
    while(*char_ptr)
    {
        if (*char_ptr < 0x41)
        {
            printf("\nInvalid login\n");
            exit(0);
        }
        if (*char_ptr > 0x5A)
            *char_ptr++ -= 0x20;// *char_ptr++ = *char_ptr++ - 0x20
    }
}

最佳答案

从C语言标准的一个版本(N1570,第6.5.16.2节复合赋值)可以看出:
形式为E1 op=E2的复合赋值等价于简单赋值表达式E1=E1 op(E2),只是左值E1只计算一次。。。
使用-=表达式,这表示

*char_ptr++ -= 0x20;

相当于
*char_ptr++ = *char_ptr++ - 0x20;

但是*char_ptr++部分只计算一次(因此指针增量只发生一次)。
相当于
*char_ptr = *char_ptr - 0x20;
char_ptr++;

关于c - 为什么指针仅增加一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57235839/

10-15 02:54