[C con Clase] paso de argumentos en programacion modular en C

Juan Antonio Hernández Álvarez juanan_picones en hotmail.com
Dom Mayo 24 23:00:55 CEST 2009


haber tu estructura es global al main.c
solo se podria acceder a ella dentro del fichero main.c(a sus campos)
si quieres usar los datos de tu estructura desde otra funcion en otro fichero.c tienes dos opciones

hacer en el otro .c ingreso.c

extern persona personas[10]; como global fuera de cualquier funcion debajo del #include "ingreso.h"

quedaria de la siguiente forma

#include "ingreso.h"
extern persona personas[10];

void ingreso(tiposparametros nombre)
{
.............
}

en el .h seria recomendable escribir el tipo de la estructura se suele hacer asi practicas de programacion vamos ejej
#include <stdio.h>
#include <stdlib.h>
(para que los vea ingreso.c)


typedef struct{
char nombre[200];
long telefono;
 char direccion[200];
}persona;

//prototipos

void ingreso(tiposparametros nombre);





La siguiente opcion es que para pases la estructura a la funcion y devuelvas otra con los pametros obtenidos  por la misma

pasar una estructura por referencia es pasar la direccion de memoria en vez del contenido

si pasamos estructura podremos leer su contenido pero si realizamos cambios es decir ponemos alguno de sus valores  a otro nuevo solo serian vistos dentro de la funcion que lo ha llamado
y al volver al main despues de ejecutar la funcion no habrian cambiado 

pasar  por referencia es pasar un puntero con la posicion de memoria si usas una estructura normal puedes pasarla a la funcion con &estructura si es un puntero a estructura como haces tu ya que creas un vector de estructuras la puedes pasar simplemente con estructura y luego usarla dentro de la funcion
ah ten en cuenta que como pasaspuntero a partir ahora(al haberla pasado a la funcion) deberas usar el operador -> en vez del operador .

ej

typedef struct
{
 int a;
}estructura

estructura miestructura
estructura miestructura2[5]

void fun1(estructura* miestructura) prototipo1
void fun2(estructura* miestructura) prototipo2


miestructura.a = 5;

void fun1(&miestructura);
void fun2(miestructura2);


bien ahora tanto una funcion como la otra en el desarrollo sería:
void fun1(estructura* m)
{
   m->a = 3
  return;
}

si volvemoa al main 
miestructura.a valdria 3 puesto que hemos modificado el contenido de la estructura a traves del puntero que la referencia

venga espero haberte ayudado un saludo Juanan


> To: cconclase en listas.conclase.net
> From: bruceleechile en gmail.com
> Date: Sun, 24 May 2009 22:34:20 +0200
> Subject: [C con Clase] paso de argumentos en programacion modular en C
> 
> Hola a todos, primero que nada decirles que recien estoy aprendiendo,  bueno mi consulta es la sgte.
> 
>    tengo un programa separado en 2 modulos, en el main.c tengo una structura:
> 
> main.c 
> 
> #include <stdio.h>
> #include <string.h>
> #include "ingreso.h"
> 
> typedef struct{
>     char nombre[200];
>     long telefono;
>     char direccion[200];
>     }persona;
> persona personas[10];
> 
> void main(){
>     ingreso();
>     printf("los datos son:"); //muestro los datos ya ingresados
>     .
>      .
>     .
>     return;
> }
> 
> 
> ingreso.c
> 
> #include <stdio.h>
> #include <string.h>
> 
> void ingreso(){
> 
>     printf("ingrese el nombre:");
>     fgets(nose que va, 200, stdin);
>     printf("ingrese direccion: ");
>     fgets(nose que va, 200, stdin);
>     printf("ingrese telefono: ");
>     fgets(nose que va, 200, stdin);
>     //transformo el telefono a long
>       ..
>    .
> 
>     ...
>    return;
> }
> 
> BUeno mi consulta es como guardo los datos ingresados en ingreso(), dentro de la estructura que esta en el main.c, como es el asunto del paso de argumentos a funciones con estructuras, e leido algo de que me recomiendan que las estructuras las pase como referencia, pero no entiendo eso, por favor si alguien me pudiera ayudar, gracias.
> 
> PD: el ingreso.h como seria en este caso??
> 
> chao gracias nuevamente
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

_________________________________________________________________
Recibe toda las noticias de actualidad al instante en tu Messenger
http://especiales.es.msn.com/noticias/msninforma.aspx 
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090524/619e45a9/attachment-0001.html>


Más información sobre la lista de distribución Cconclase