2017-02-14 5 views
0

私はExtended USB Controlsについて学ぶためにコードを勉強していますが、私はこのコードを以下に示しました。この関数は、配列の順序を逆にします。 1つのことを除いて、これはかなり単純です。コードが配列を破壊するのはなぜですか?同じ変数としてソースとデスティネーションを使用すると、それが破損するはずです。なぜこの配列は汚れませんか?

/* 
* 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; 
} 

Ah:「静的な」宣言ではありませんか?

+1

? (関数の静的な宣言は、コピーには何の影響も与えません) –

答えて

1

これは、交換する値を保持するために一時的なものとしてabを使用します。 - のみone temporary is neededこれは以下のように書き換えることができます

while (ai < bi) { 
    a = data[ai]; 
    data[ai] = data[bi]; 
    data[bi] = a; 
    ai++; 
    bi--; 
} 
それは同じ変数として送信元と宛先を使用しない
+0

ああ、私はそれを得ました。ワオ。それは本当に明らかです。私は彼らが一度に1つの場所を書いていると思ったが、文字通りその場所を交換している。 – Raydude

関連する問題