需要一些关于一行(指针)的解释

时间:2016-10-14 11:35:24

标签: c

我有一个小问题,我尝试理解C中的一个函数,有一行我不明白...... 这是代码:

void *my_memcpy(void *dest, const void *srce, size_t n)
{   
    unsigned int size_tmp;

    size_tmp = 0;
    char *tmp_dest = dest;
    const char *tmp_srce = srce;
    while(size_tmp < n)
    {
        *tmp_dest++ = *tmp_srce++;
        size_tmp ++;
    }
    return dest;
}

这是具体的一行:

*tmp_dest++ = *tmp_srce++;

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您挖掘出运算符优先级表,您会注意到postfix ++的优先级高于指针 dereference 。所以

*tmp_dest++ = *tmp_srce++;

评估为

*(tmp_dest++) = *(tmp_srce++);

这意味着指针tmp_srce加1,但指针被解除引用。该值被赋值为tmp_dest的解除引用值,之后该指针也会加1。

换句话说,它是一种将字符从一个字符串复制到另一个字符串的可爱方式,将两个指针都指向下一个字符串。

答案 1 :(得分:1)

这是一行可以同时执行多项操作:

  • 它获取源指针指向的值,并将其复制到目标指针所指向的地址
  • 之后,它会根据指向的数据大小推进两个指针,并将其新值存储回指针中,无需特别顺序