为什么这个阵列不会被搞砸?

时间:2017-02-14 18:55:58

标签: arrays

我正在学习代码以了解扩展USB控件,我遇到了如下所示的代码。该函数反转数组的顺序。这是非常直接的,除了一件事。为什么代码不会破坏数组?使用源和目标作为同一个变量应该会破坏它,不应该吗?

/*
 * Convert a array of bytes from big endian to little endian and vice versa by inverting it
 */
static
uint8_t *raw_inv(uint8_t *data, int size) {

    int ai = 0;
    int bi = size - 1;
    uint8_t a = 0;
    uint8_t b = 0;

    while (ai < bi) {
        a = data[ai];
        b = data[bi];

        data[ai] = b;
        data[bi] = a;
        ai++;
        bi--;
    }

    return data;
}

啊:这是'静态'声明,不是吗?

1 个答案:

答案 0 :(得分:1)

它使用ab作为临时值来保存它正在交换的值。只有one temporary is needed - 这可以改写为:

while (ai < bi) {
    a = data[ai];
    data[ai] = data[bi];
    data[bi] = a;
    ai++;
    bi--;
}