title: Passing Arrays by Value and by Reference
body: <p>These are example from a c# book that I am reading just having a little trouble grasping what this example is actually doing would like an explanation to help me further understand what is happening here.</p>
  
  <pre><code>        //creates and initialzes firstArray
          int[] firstArray = { 1, 2, 3 };
  
          //Copy the reference in variable firstArray and assign it to firstarraycopy
          int[] firstArrayCopy = firstArray;
  
          Console.WriteLine("Test passing firstArray reference by value");
  
  
          Console.Write("\nContents of firstArray " +
              "Before calling FirstDouble:\n\t");
  
          //display contents of firstArray with forloop using counter
          for (int i = 0; i &lt; firstArray.Length; i++)
              Console.Write("{0} ", firstArray[i]);
  
          //pass variable firstArray by value to FirstDouble
          FirstDouble(firstArray);
  
          Console.Write("\n\nContents of firstArray after " +
              "calling FirstDouble\n\t");
  
          //display contents of firstArray
          for (int i = 0; i &lt; firstArray.Length; i++)
              Console.Write("{0} ", firstArray[i]); 
  
          // test whether reference was changed by FirstDouble
          if (firstArray == firstArrayCopy)
              Console.WriteLine(
                  "\n\nThe references refer to the same array");
          else
              Console.WriteLine(
                  "\n\nThe references refer to different arrays");
  
         //method firstdouble with a parameter array
         public static void FirstDouble(int[] array)
      {
          //double each elements value
          for (int i = 0; i &lt; array.Length; i++)
              array[i] *= 2;
  
          //create new object and assign its reference to array
          array = new int[] { 11, 12, 13 };
  </code></pre>
  
  <p>Basically there is the code what I would like to know is that the book is saying if the array is passed by value than the original caller does not get modified by the method(from what i understand). So towards the end of method FirstDouble they try and assign local variable array to a new set of elements which fails and the new values of the original caller when displayed are 2,4,6.</p>
  
  <p>Now my confusion is how did the for loop in method FirstDouble modify the original caller firstArray to 2,4,6 if it was passed by value. I thought the value should remain 1,2,3. </p>
  
  <p>Thanks in advance</p>