我正在学习代码以了解扩展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;
}
啊:这是'静态'声明,不是吗?
答案 0 :(得分:1)
它使用a
和b
作为临时值来保存它正在交换的值。只有one temporary is needed - 这可以改写为:
while (ai < bi) {
a = data[ai];
data[ai] = data[bi];
data[bi] = a;
ai++;
bi--;
}