Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Senior++ en 3 Noviembre 2014, 17:14 pm



Título: Tipos Valor y Tipos Referencia(Solucionado)
Publicado por: Senior++ en 3 Noviembre 2014, 17:14 pm
Bueno resulta que estaba "explorando" un foro y un usuario dijo esto:

int variableUno;
variableuno= 57

int variableDos;
variableDos = variableUno
variableUno++


VariableUno crea un espacio en memoria y luego le asigna el valor 57 (hasta aquí estoy de acuerdo)
variableDos crea una espacio en memoria y luego le asigna el valor de variableUno(57)

VariableUno tiene el valor 58 en memoria
variableDos tiene el valor 57 en memoria
Hasta aquí todo perfecto

Pero en este codigo cambia la cosa

int variableUno;
variableuno= 57
variableUno++
int variableDos;
variableDos = variableUno

VariableUno tiene el valor 58 en memoria
variableDos tiene el valor 57 en memoria

osea eso esta mal no? es decir tendria que tener 58 los dos no?


Título: Re: Tipos Valor y Tipos Referencia
Publicado por: El Benjo en 3 Noviembre 2014, 19:34 pm
Sí, así es. No entiendo por qué la duda me refiero a que bastaría con hacer el programa (en cualquier lenguaje) y la respuesta ahí está. Es decir si cualquiera de los dos tiene la duda de qué es lo que pasa, sólo tiene que escribir el código y ejecutar.

MODIFICADO: No entiendo por qué el título de tu post si nunca haces la comparación entre valor y referencia.

Quizá lo que te estés preguntando sea por ejemplo sobre asignar la dirección de una variable en una variable de tipo referencia (como un puntero en C/C++). Si la variableDos fuera un puntero y le asignas la dirección de variableUno entonces su valor no cmabia cuando el valor de la variableUno cambia, pero nunca contiene el valor '57' sino la dirección de la variableUno.

Si necesita más información lee sobre punteros.


Título: Re: Tipos Valor y Tipos Referencia
Publicado por: Senior++ en 3 Noviembre 2014, 20:13 pm
Sí, así es. No entiendo por qué la duda me refiero a que bastaría con hacer el programa (en cualquier lenguaje) y la respuesta ahí está. Es decir si cualquiera de los dos tiene la duda de qué es lo que pasa, sólo tiene que escribir el código y ejecutar.

MODIFICADO: No entiendo por qué el título de tu post si nunca haces la comparación entre valor y referencia.

Quizá lo que te estés preguntando sea por ejemplo sobre asignar la dirección de una variable en una variable de tipo referencia (como un puntero en C/C++). Si la variableDos fuera un puntero y le asignas la dirección de variableUno entonces su valor no cmabia cuando el valor de la variableUno cambia, pero nunca contiene el valor '57' sino la dirección de la variableUno.

Si necesita más información lee sobre punteros.
:rolleyes:

El titulo del post, me equivoque  :xD

entonces estoy en lo cierto no?osea si llamamos las 2 variables deberian de devolver las dos 58

En este ejemplo esta mas que claro:

Código:
 int i;
            int j;

            i = 1;
            j = i;
            i++;
            j--;
            Console.WriteLine(String.Format("i={0} j={1}", i, j));

            // i=2 j=0, porque al asignar j=i, lo que hacemos es
            // una copia de su contenido.

            Console.ReadKey();

Por que los tipos valor, siempre actuan INDEPENDIENTE el uno del otro, y claro al ver eso en un foro que de hecho es un CURSO, me dolía hasta los ojos  :laugh:


Título: Re: Tipos Valor y Tipos Referencia
Publicado por: Eleкtro en 3 Noviembre 2014, 20:40 pm
entonces estoy en lo cierto no?osea si llamamos las 2 variables deberian de devolver las dos 58

Sí. Podrías haberlo comprobado por ti mismo como ya te han comentado.

Saludos


Título: Re: Tipos Valor y Tipos Referencia
Publicado por: Senior++ en 3 Noviembre 2014, 20:42 pm
Sí. Podrías haberlo comprobado por ti mismo como ya te han comentado.

Saludos
Claro,me dejo en duda, pero bueno ya lo habia probado yo :xD


Bueno tema solucionado, vaya fail  :rolleyes:


Título: Re: Tipos Valor y Tipos Referencia(Solucionado)
Publicado por: DarK_FirefoX en 4 Noviembre 2014, 01:38 am
osea eso esta mal no? es decir tendria que tener 58 los dos no?

Exactamente como dices ambos valores debieron ser iguales.

Y como bien dice El Benjo, si quieres puedes eplorar los conceptos básicos sobre punteros en C/C++ para entender un poquito más como se trabaja con las direcciones de memoria.

Una sugerencia para tu codigo aqui:

Código
  1. int i;
  2. int j;
  3.  
  4. i = 1;
  5. j = i;
  6. i++;
  7. j--;
  8. Console.WriteLine("i={0} j={1}", i, j);
  9.  
  10. /*AQUÍ EN ESTA ^ LINEA NO NECESITABAS
  11. * EL MÉTODO string.Format() PARA UTILIZAR LOS
  12. *PLACEHOLDERS {#} EN EL MÉTODO Console.WriteLine().
  13. *Solo una sugerencia!*/
  14.  
  15. // i=2 j=0, porque al asignar j=i, lo que hacemos es
  16. // una copia de su contenido.
  17.  
  18. Console.ReadKey();