我不叫ano 2022-11-01 19:08 采纳率: 100%
浏览 21
已结题

求解释,为什么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

  • 写回答

2条回答 默认 最新

  • JarodYv 领域专家: 人工智能技术领域 2022-11-01 19:24
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 11月1日