我正在研究代码以了解扩展的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;
}啊:这是'static‘声明,不是吗?
发布于 2017-02-15 02:58:37
它使用a和b作为临时变量来保存要交换的值。只有one temporary is needed --这可以重写为:
while (ai < bi) {
a = data[ai];
data[ai] = data[bi];
data[bi] = a;
ai++;
bi--;
}https://stackoverflow.com/questions/42234093
复制相似问题