Pasar array por referencia

24/09/2004 - 10:04 por Carla | Informe spam
Hola a todos,
Tengo que pasar un array(de ints) a un metodo.Dentro del
metodo puedo cambiar los valores del array
perfectamente.Pero no puedo cambiar el array.Es decir,si
igualo el array a otro que tengo(que puede ser igual,mas
pequeño o mas grande),dentro del metodo si esta todo
bien,pero cuando retorno al metodo llamante, la referencia
es la antigua.Por que pasa esto?

Gracias y un saludo

Por ejemplo

public void inicio()
{
int[] numeros=new int[2]
numeros[0]=1;
numeros[1]=2;
cambiarArray(numeros)
//Aqui el array numeros solo tiene dos dimensiones
}

private void cambiarArray(int[] numeros)
{
int[] auxiliar=new int3]
auxiliar[0]=1;
auxiliar[1]=2;
auxiliar[3]=3
numeros=auxiliar;
}

Preguntas similare

Leer las respuestas

#1 Antonio Cuesta
24/09/2004 - 11:07 | Informe spam
Buenos días

El problema es que no estas pasando los argumentos como referencia, para eso
tal como se indica antes en otro mensaje hay que poner "ref" u "out" en los
parametros.


Prueba lo siguiente:

public void inicio()
{
int[] numeros=new int[2];
numeros[0]=1;
numeros[1]=2;
cambiarArray(out numeros);
//Aqui el array numeros solo tiene dos dimensiones
}

private void cambiarArray(out int[] numeros)
{
int[] auxiliar=new int[3];
auxiliar[0]=1;
auxiliar[1]=2;
auxiliar[3]=3;
numeros=auxiliar;
}


Busca en la ayuda información para aclararte sobre el uso de "ref" y "out"
para que veas sus diferencias.

Un saludo:
Antonio Cuesta.
Respuesta Responder a este mensaje
#2 Carla
24/09/2004 - 11:43 | Informe spam
Me olvide indicarlo en el mensaje, pero claro que habia
probado a pasarlo por referencia.Pero con eso no se
arregla.

Teneis idea por que es?
Respuesta Responder a este mensaje
#3 Antonio Cuesta
24/09/2004 - 12:44 | Informe spam
A mi si que me funciona, antes de responder hice una prueba.

La prueba consistio en lo siguiente:

public void inicio()
{
int[] x=new int[2];

x[0]=2;

x[1]=4;


for(int i=0;i<x.Length;i++)

Console.WriteLine(x[i].ToString());

Cambia(ref x);

for(int i=0;i<x.Length;i++)

Console.WriteLine(x[i].ToString());

}

private void Cambia(ref int[] mat)

{

int[] nMat=new int[4];

mat.CopyTo(nMat,0);

for(int i=mat.Length;i<nMat.Length;i++)

nMat[i]=i+1;

mat=nMat;

}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida