开发者社区> 问答> 正文

C语言中*s++ = *t++ 是怎么一种赋值过程

如题 K&R 中的 一个strcpy函数中出现的方式

void strcpy(char *s, char *t)
 {    
     while (*s++ = *t++);
 }

展开
收起
a123456678 2016-06-07 19:15:52 2764 0
1 条回答
写回答
取消 提交回答
  • void v(char *s, char *t) {
        *s++ = *t++;
    }
    看一下对应指令
    
    push   %rbp
    mov    %rsp,%rbp
    mov    %rdi,-0x8(%rbp)   //参数1 s
    mov    %rsi,-0x10(%rbp)  //参数2 t
    mov    -0x10(%rbp),%rax  //t暂存%rax
    movzbl (%rax),%edx       //*t放入%edx
    mov    -0x8(%rbp),%rax   //s暂存%rax
    mov    %dl,(%rax)        //*t的低8位,即一个字节,放入*s
    addq   $0x1,-0x8(%rbp)   //s++
    addq   $0x1,-0x10(%rbp)  //t++
    leaveq 
    retq

    可以看到,先s = t,然后s和t各自加1

    2019-07-17 19:30:49
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载