这函数里的memcpy是否多此一举

这函数里的memcpy是不是多此一举?
书上很多函数都用到了下面这种方法,我不知道使用memcpy赋值是出于什么原因,感觉多此一举.
比如这个函数
static void permute(unsigned char *bits, const int *mapping, int n) 
{
    unsigned char      temp[8];    
    int                i;
    memset(temp, 0, (int)ceil(n / 8));
    for (i = 0; i < n; i++)
       bit_set(temp, i, bit_get(bits, mapping[i] - 1));
    memcpy(bits, temp, (int)ceil(n / 8));
    return;
}

为什么不直接这样写:
static void permute(unsigned char *bits, const int *mapping, int n)
{
    int                i;
    for (i = 0; i < n; i++)
       bit_set(bits, i, bit_get(bits, mapping[i] - 1));
    return;
}

------解决方案--------------------
不行,bit_get(bits, mapping[i] - 1));这里面一在使用bits,然后又赋值给bits,这样应该不行