Estos son ejemplos de un libro de C# que estoy leyendo solo teniendo un pequeño problema para comprender lo que este ejemplo está haciendo en realidad me gustaría una explicación que me ayude a comprender mejor lo que está sucediendo aquí.Pasando matrices por valor y por referencia
//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 < 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 < 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 < array.Length; i++)
array[i] *= 2;
//create new object and assign its reference to array
array = new int[] { 11, 12, 13 };
Básicamente no es el código de lo que me gustaría saber es que el libro está diciendo que si la matriz se pasa por valor de la llamada original no se modifican por el método (por lo que entiendo). Así que hacia el final del método FirstDouble intentan asignar una matriz de variables local a un nuevo conjunto de elementos que falla y los nuevos valores de la llamada original cuando se muestran son 2,4,6.
Ahora mi confusión es cómo hizo el bucle for en el método FirstDouble para modificar la llamada original firstArray a 2,4,6 si se pasaba por valor. Pensé que el valor debería seguir siendo 1,2,3.
Gracias de antemano
posible duplicado de [Tipo de valor y problema del tipo de referencia] (http://stackoverflow.com/questions/6070892/value-type-and-reference-type-problem) –
@AlexeiLevenkov Con esto cubierto tan bien en otro lugar, 'd odio a cerrar para que uno :( –