求解释,为什么while中自增放括号内部和括号外面实现的结果不一样!

在模拟实现strcat函数时,如果我将dest++放入

char* my_strcat(char* dest,const char* sour)
{
    char* ret = dest;
    while (*dest) {
        dest++;
    }
    while (*dest++ = *sour++);
    return ret;
}
int main()
{
    char arr1[20] = "hello ";
    char arr2[] = "world";
    my_strcat(arr1, arr2);
    printf("%s", arr1);
    return 0;
}

img

img

使用上面的代码可以模拟实现strcat函数。
但是如果将
while (*dest) {
dest++;
}
改成
while (*dest++);
输出的却不是正确结果

img

img

++运算符的优先级比解引用运算符*的优先级要高,因此 *dest++的运算顺序是 *(dest++),因此你将++放到while的判断条件里逻辑就不对了。

*dest++ 的意思是取dest指针下一个位置的值;
(*dest)++的意思是取dest指针指向的值,然后再自加;