2015-12-08 20 views
2

所以我有我用C#編寫的代碼。它應該顛倒位陣列中的位的順序(不反轉它們)。通過大量使用斷點和手錶,我已經確定函數以某種方式修改了輸入參數數組array和我拷貝的數組,以試圖使該函數不改變輸入數組,tempArray爲什麼這個C#函數的行爲像我使用指針?

static BitArray reverseBits(BitArray array) 
    { 
     BitArray tempArray = array; 
     int length = tempArray.Length; 
     int mid = length/2; 

     for (int i = 0; i < mid; i++) 
     { 
      bool tempBit = tempArray[i]; 
      tempArray[i] = tempArray[length - 1 - i]; //the problem seems to be happening 
      tempArray[length - 1 - i] = tempBit;  //somewhere in this vicinity 
     } 

     return tempArray; 
    } 

我不知道爲什麼它的行爲是這樣的。當然,指針並不是我的強項,但我儘量避免使用它們,並且它們在c#中看起來並沒有太多用處,這就是爲什麼我對這種行爲感到困惑。

TL; DR:如果你通過我的功能00000001,你會回到從功能10000000,那是從外面通過array將被改變成以及

附:這是與FFT相關的任務,這就是爲什麼我打擾了位反轉。

+1

BitArray是引用類型,這樣你就不會做副本的時候你做的任務,要複製的參考。 –

回答

2

您尚未複製數組,您剛將其分配給另一個變量。

BitArray是一個類,所以總是通過引用傳遞(類似於C/etc中的指針)。

如果要複製數組,請使用.CopyTo方法。

5

我相信你想這樣創建BitArray的新實例:

BitArray tempArray = new BitArray(array); 

這應該創建一個BitArray的新實例,而不是創建另一個變量引用原始數組。

0

也許這字節類似的功能可以幫助你

 /// <summary> 
     /// Reverse bit order in each byte (8 bits) of a BitArray 
     /// (change endian bit order) 
     /// </summary>  
     public static void BytewiseReverse(BitArray bitArr) 
     {  
      int byteCount = bitArr.Length/8;  
      for (int i = 0; i < byteCount; i++) 
      { 
       for (int j = 0; j < 4; j++) 
       { 
        bool temp = bitArr[i * 8 + 7 - j]; 
        bitArr[i * 8 + 7 - j] = bitArr[i * 8 + j]; 
        bitArr[i * 8 + j] = temp; 
       } 
      } 
     } 
相關問題