香音真的好好看啊 2022-11-01 19:08 采纳率: 100%
浏览 20
已结题

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

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法