2012-05-04 8 views
3

誰かが私に何を説明できるのですか?XOR(^)は、休止コードのexacllyでどのように関数がポインタになるのですか?XORのコード - 説明が必要

char *strReverse(char *str) 
{ 
     char *pb, *pe; 

     for (pb = str, pe = str + strlen(str) - 1; pe > pb; ++pb, --pe) 
     { 
      *pb ^= *pe; 
      *pe ^= *pb; 
      *pb ^= *pe; 
     } 
     return str; 
} 
+3

http://betterexplained.com/articles/swap-two-variables-using-xor/ 'std :: swap'を使うとより良い結果が得られることに注意してください。 – chris

+3

xorトリックは、余分な変数を使用せずに2つの値をスワップするための愚かなトリックです(読めないコードとは別に何も得られません)。 –

+0

よく私はそのトリックを見て、私は骨董品だったが、それは素晴らしいトリックだと私に伝えてくれたことを伝えてくれた...しかし、それは+ intsのためだけに働く –

答えて

3

この関数はポインタではありませんが、char*を返します。

この関数は文字列を反転します。

このXOR技術は、余分なメモリなしで2つの要素を交換するために使用されます。ご覧のように、ループは文字列の開始と終了を繰り返し、2つの文字をスワップします。char

+0

ahamありがとう!、だから私はすべて:)) –

+0

@BogdanMaier np。 –

+0

@ LokiAstari私はもっと適切な用語があることを知っていました! –

1

xorを使用すると、これは一時変数を使用せずにメモリ内の2つの値を交換する別の方法です。他のビットハックのためにbit hacksをお勧めします。