*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/