2017-02-14 59 views
0

我正在学习关于扩展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

它在哪里使用源和目标作为相同的变量? (该函数的“静态”声明不应该影响复制。) –

回答

1

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

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

哦,我明白了。哇。这真的很明显。我以为他们一次只写一个地方,但他们真的在交换地点。 – Raydude

相关问题