elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Error compilador?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Error compilador?  (Leído 1,483 veces)
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
¿Error compilador?
« en: 19 Junio 2014, 14:52 pm »

Muy buenas, haciendo un ejercicio para intercambiar dos valores, hecho con dos funciones, una con llamada por valor, y otra por referencia, está todo correcto, pero a la hora de compilar, en el paso de parámetros por valor, no me cambia los valores, o sea, que en val1 es = 10 y val2 = 20.

He repasado todo el código y no encuentro nada, me estoy volviendo loco :/

Código
  1. /* Intercambio de valores usando llamada por valor y por referencia */
  2.  
  3. #include <stdio.h>
  4.  
  5. void IntercambioValor(int v1, int v2); //Utiliza variables
  6. void IntercambioReferencia(int *pv1, int *pv2); //Utiliza punteros
  7.  
  8. main(){
  9. int val1=10, val2=20;
  10. printf("Valores iniciales:\n\tval1 = %d; val2 = %d\n",val1,val2);
  11.  
  12. // Paso de parámetros por valor
  13.  
  14. IntercambioValor(val1,val2);
  15. printf("\nPaso de parametros por valor: \n\tval1 = %d; val2 = %d\n",val1,val2);
  16.  
  17. // Paso de parámetros por referencia
  18.  
  19. IntercambioReferencia(&val1,&val2);
  20. printf("\nPaso de parametros por referencia: \n\tval1 = %d; val2 = %d\n",val1,val2);
  21. }
  22.  
  23. void IntercambioValor(int v1, int v2){
  24. int tmp;
  25.  
  26. tmp = v1;
  27. v1 = v2;
  28. v2 = tmp;
  29. }
  30.  
  31. void IntercambioReferencia(int *pv1, int *pv2){
  32. int tmp;
  33.  
  34. tmp = *pv1;
  35. *pv1 = *pv2;
  36. *pv2 = tmp;
  37. }

Si alguien me puede aclarar porqué ocurre esto, se lo agradecería ^^


En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
engel lex
Colaborador
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: ¿Error compilador?
« Respuesta #1 en: 19 Junio 2014, 15:21 pm »

Por valor básicamente se crea una copia de la variable dentro de la funcion con los valores pasados, justamente el paso por referencia es que pasen los punteros permitiendo modificar el valor original, esta funcionando bien, asi es :p

Básicamente por eso se llama asi... el paso por valor solo pasas los valores, por referencias pasas la referencia (el puntero que señala la variable) y no el valor realmente


« Última modificación: 19 Junio 2014, 15:26 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: ¿Error compilador?
« Respuesta #2 en: 19 Junio 2014, 19:59 pm »

Ya, pero paso los valores a la función, y en ella cambio los valores de v1 y v2 y luego al mostrarlo por pantalla, salen sin haberse cambiado, eso es lo que no entiendo :/
« Última modificación: 19 Junio 2014, 20:32 pm por Baal_30 » En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
engel lex
Colaborador
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: ¿Error compilador?
« Respuesta #3 en: 19 Junio 2014, 21:12 pm »

Te explico de nuevo

Al pasarlo por valor, tu funcion crea una copia de tus variables y modifica esa copia, las originales no las vuelve a tocar

Es similar a

Int a = 1;
int b = a;
a = 2;

En este caso b vale 1 porque fue una copia de a cuando su valor era 1
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: ¿Error compilador?
« Respuesta #4 en: 19 Junio 2014, 21:21 pm »

Osea que, en otras palabras, debes usa un return para mostrar los valores intercambiados (podrías ocupar un arreglo o una estructura).
En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: ¿Error compilador?
« Respuesta #5 en: 19 Junio 2014, 21:47 pm »

Umm vale, eso no lo sabía. Uf, me ha liado más todavía :/

Muchas gracias por responder a ambos. :D
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
engel lex
Colaborador
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: ¿Error compilador?
« Respuesta #6 en: 19 Junio 2014, 22:06 pm »

Es mas facil recordar que por valo SOLO pasa el contenido
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: ¿Error compilador?
« Respuesta #7 en: 19 Junio 2014, 22:55 pm »

Es mas facil recordar que por valo SOLO pasa el contenido

Merci! :)
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
será error del compilador? « 1 2 »
Programación C/C++
engel lex 14 9,606 Último mensaje 8 Septiembre 2010, 14:47 pm
por clodan
Error en C ¿Compilador erróneo?
Programación C/C++
iCore 3 2,161 Último mensaje 12 Octubre 2010, 18:17 pm
por iCore
El compilador no indica la línea en la que se produce el error.
.NET (C#, VB.NET, ASP)
DanteInfernum 0 842 Último mensaje 30 Julio 2013, 18:29 pm
por DanteInfernum
error compilador. (solucionado)
Programación C/C++
nolasco281 8 1,635 Último mensaje 4 Abril 2014, 19:35 pm
por nolasco281
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines