香音真的好好看啊 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日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法