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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] pase de parametros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] pase de parametros  (Leído 2,936 veces)
J.cE

Desconectado Desconectado

Mensajes: 13


Ver Perfil
[C] pase de parametros
« en: 25 Febrero 2014, 19:47 pm »

como estan amigo, mi pregunta es como se hace el pase de parametros a un procedimento dentro de otro procedimento, ejm:

#include<stdio.h>
typedef struct
{
  int n;
}numero;
void uno(numero *n);
void dos(numero *n);

main()
{
  numero n;
  uno(&n);
}

void uno(numero *n)
{
   dos(&n);//aqui es la duda no se si eso sea correcto


En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: [C] pase de parametros
« Respuesta #1 en: 25 Febrero 2014, 22:07 pm »

hola J.cE , debes leer sobre las dos posibilidades de pasaje de parámetros a una función, pueden ser por valor o por referencia. entendiendo eso sabrás cuando debes pasar una variable (cantidad de "algo") para operar con ella, o un puntero (dirección de memoria donde se guarda ese "algo") para operar, y modificarlo:

-> https://www.google.com.ar/?gws_rd=cr&ei=D9haUrrXC8bLkQfp3oCYAQ#q=pasaje+de+parametros+por+valor+y+referencia+

luego que domines su uso en funciones básicas, puedes seguir con los tda (tipos de dato abstracto, donde se inicia con las estructuras, luego pilas, colas, el concepto de nodo, listas, árboles...)


->http://es.wikipedia.org/wiki/Tipo_de_dato_abstracto

que es el inicio del paradigma POO... pero hay que ir paso a paso. saludos!


En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C] pase de parametros
« Respuesta #2 en: 25 Febrero 2014, 23:36 pm »

No es correcto, debe ser:

Código
  1. void uno(numero *n)
  2. {
  3.   dos(n);//aqui es la duda no se si eso sea correcto
  4. }  

n ya es un puntero, no necesitas coger su dirreción.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [C] pase de parametros
« Respuesta #3 en: 1 Marzo 2014, 16:17 pm »

Hola, supongo que tu intención es que la función "uno" tome su parámetro y se lo pase a la función "dos". En ese caso, me voy a tomar la libertar de cambiar el nombre del miembro entero de la estructura numero de "n" a "x". Pues tienes un uso duplicado de nombres que si bien no es un error, puede resultar confuso. Así quedaría:

Código
  1. #include<stdio.h>
  2. typedef struct
  3. {
  4.  int x;
  5. }numero;
  6.  

También te aconsejaría que cuando el argumento se refiera a un puntero, uses un sufijo distintivo como "Ptr", o "_ptr". Quedaría entonces:

Código
  1. void uno (numero *n_ptr);
  2. void dos (numero *n_ptr);

Ahora vamos al centro del problema. En C todos los argumentos de las funciones se pasan por valor. Es decir, se pasa como argumento de la función una copia del valor de la variable. Pero se puede simular el paso por referencia, dando como argumento la dirección de la variable en cuestión (ésto eso, se pasa un puntero a dicha variable). Lo cual permite alterar directamente la variable al manipular en el área de memoria ocupada por ésta. Sólo ten en cuenta que en el código de la función debes usar el operador de indirección "*" para acceder al contenido de la variable, apuntado por la dirección suministrada.

Por ejemplo, supongamos que "uno" pasa el valor de su argumento (un puntero) a "dos", la cual modifica el valor del campo x de la estructura referenciada. Entonces sería

Código
  1. main()
  2. {
  3.  numero n;
  4.  uno(&n);
  5. }
  6.  
  7. void uno (numero *n_ptr)
  8. {
  9.   dos (n_ptr);    // se pasa una copia del puntero a "dos"
  10. }
  11.  
  12. void dos (numero *n_ptr)
  13. {
  14.    (*nptr).x += 1;
  15. }

Observa que en el código de "dos" se accede al contenido apuntado por n_ptr (el contenido de la variable n) por medio de (*n_ptr). Se requieren los paréntesis porque el operador "." tiene mayor prioridad que el "*", y de no colocarlos se interpretaría *(n_ptr.x) que es incorrecto pues n_ptr es un apuntador y no una estructura.

Por último, aquí puedes ver el código completo y al compilar y ejecutar verás que aunque hemos puesto inicialmente el valor de n.x en 3, al final termina siendo 4  :D

Código
  1. #include<stdio.h>
  2.  
  3. typedef struct
  4. {
  5.  int x;
  6. }numero;
  7.  
  8. void uno (numero *n_ptr);
  9. void dos (numero *n_ptr);
  10.  
  11. main()
  12. {
  13.  numero n;
  14.  n.x = 3;
  15.  printf ("antes n.x era: %d\n", n.x);
  16.  uno (&n);
  17.  printf ("ahora n.x es: %d\n", n.x);
  18. }
  19.  
  20. void uno (numero *n_ptr)
  21. {
  22.   dos (n_ptr);    // se pasa una copia del puntero a "dos"
  23. }
  24.  
  25. void dos (numero *n_ptr)
  26. {
  27.    (*n_ptr).x += 1;
  28. }
« Última modificación: 1 Marzo 2014, 16:20 pm por yoel_alejandro » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C] pase de parametros
« Respuesta #4 en: 2 Marzo 2014, 15:54 pm »

¿Para que creas una estructura? :huh:

Puedes hacerlo directamente:
Código
  1. typedef int Numero;
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [C] pase de parametros
« Respuesta #5 en: 2 Marzo 2014, 20:56 pm »

Jeje, bueno yo no se por qué el autor del post usó una estructura (aunque sinceramente me pareció algo complicado), sólo traté de aclarar la duda planteada respetando hasta lo posible la integridad del tema original  :D
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pase de fotos
Multimedia
logistica 5 3,332 Último mensaje 3 Abril 2006, 07:32 am
por logistica
alguien q me pase los links de!!!!!!!!1
Diseño Gráfico
pembe180 1 2,166 Último mensaje 27 Noviembre 2006, 04:27 am
por -[C][L4RiO][N]-
Alguien que me pase un super manual de JNA
Java
cyberserver 2 4,010 Último mensaje 6 Diciembre 2009, 07:09 am
por cyberserver
Pase lo que pase este 2012, siempre los recordare!
Foro Libre
Di~OsK 0 1,733 Último mensaje 20 Enero 2012, 06:34 am
por Di~OsK
¿Qué significa que tu gato pase su cabeza sobre tus piernas?
Foro Libre
Machacador 2 1,849 Último mensaje 17 Enero 2020, 18:33 pm
por El_Andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines