jueves, 4 de septiembre de 2008

Estructura y Funciones

Estructuras y funciones
     Podemos enviar una estructura a una función de las dos maneras conocidas:
1.- Por valor: su declaración sería:


void visualizar(struct trabajador);
      Después declararíamos la variable fijo y su llamada sería:


visualizar(fijo);
      Por último, el desarrollo de la función sería:


void visualizar(struct trabajador datos)


/* Paso de una estructura por valor. */



#include <stdio.h>



struct trabajador

{


    char nombre[20];


    char apellidos[40];


    int edad;


    char puesto[10];


};



void visualizar(struct trabajador);

main() /* Rellenar y visualizar */


{


    struct trabajador fijo;


    printf("Nombre: ");


    scanf("%s",fijo.nombre);


    printf("\nApellidos: ");


    scanf("%s",fijo.apellidos);


    printf("\nEdad: ");


    scanf("%d",&fijo.edad);


    printf("\nPuesto: ");


    scanf("%s",fijo.puesto);


    visualizar(fijo);


}



void visualizar(struct trabajador datos)

{


    printf("Nombre: %s",datos.nombre);


    printf("\nApellidos: %s",datos.apellidos);


    printf("\nEdad: %d",datos.edad);


    printf("\nPuesto: %s",datos.puesto);


}



 



2.- Por referencia: su declaración sería:




void visualizar(struct trabajador *);
      Después declararemos la variable fijo y su llamada será:


visualizar(&fijo);
      Por último, el desarrollo de la función será:


void visualizar(struct trabajador *datos)


     Fíjate que en la función visualizar, el acceso a los campos de la variable datos se realiza mediante el operador ->, ya que tratamos con un puntero. En estos casos siempre utilizaremos el operador ->. Se consigue con el signo menos seguido de mayor que.



/* Paso de una estructura por referencia. */



#include <stdio.h>



struct trabajador

{


    char nombre[20];


    char apellidos[40];


    int edad;


    char puesto[10];


};



void visualizar(struct trabajador *);

main() /* Rellenar y visualizar */


{


    struct trabajador fijo;


    printf("Nombre: ");


    scanf("%s",fijo.nombre);


    printf("\nApellidos: ");


    scanf("%s",fijo.apellidos);


    printf("\nEdad: ");


    scanf("%d",&fijo.edad);


    printf("\nPuesto: ");


    scanf("%s",fijo.puesto);


    visualizar(&fijo);


}



void visualizar(struct trabajador *datos)

{


    printf("Nombre: %s",datos->nombre);


    printf("\nApellidos: %s",datos->apellidos);


    printf("\nEdad: %d",datos->edad);


    printf("\nPuesto: %s",datos->puesto);


}



 



Arrays de estructuras


     Es posible agrupar un conjunto de elementos de tipo estructura en un array. Esto se conoce como array de estructuras:




struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
};

struct trabajador fijo[20];
      Así podremos almacenar los datos de 20 trabajadores. Ejemplos sobre como acceder a los campos y sus elementos: para ver el nombre del cuarto trabajador, fijo[3].nombre;. Para ver la tercera letra del nombre del cuarto trabajador, fijo[3].nombre[2];. Para inicializar la variable en el momento de declararla lo haremos de esta manera:


struct trabajador fijo[20]={{"José","Herrero Martínez",29},{"Luis","García Sánchez",46}};


Typedef


     El lenguaje 'C' dispone de una declaración llamada typedef que permite la creación de nuevos tipos de datos. Ejemplos:




typedef int entero; /* acabamos de crear un tipo de dato llamado entero */
entero a, b=3; /* declaramos dos variables de este tipo */
      Su empleo con estructuras está especialmente indicado. Se puede hacer de varias formas:


Una forma de hacerlo:

struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;

};

typedef struct trabajador datos;
datos fijo,temporal;


Otra forma:

typedef struct
{
char nombre[20];
char apellidos[40];
int edad;
}datos;

datos fijo,temporal;

No hay comentarios: