1 / 16

Programación I Teoría IV

Programación I Teoría IV. http://proguno.unsl.edu.ar proguno@unsl.edu.ar. Registros. Llamados también tuplas , estructuras, records, structs , … Estructura heterogénea Selector: identificador de campo del registro (explícito) Capacidad estática. Operaciones: asignación e inspección.

leora
Download Presentation

Programación I Teoría IV

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación ITeoría IV http://proguno.unsl.edu.ar proguno@unsl.edu.ar

  2. Registros • Llamados también tuplas, estructuras, records, structs, … • Estructura heterogénea • Selector: identificador de campo del registro (explícito) • Capacidad estática. • Operaciones: asignación e inspección. • No hay orden en sus elementos.

  3. Registros en C: Structs structnombre-registro{ tipo nombre-campo; tipo nombre-campo; . . . } /*Tipostructfecha */ structfecha{ intanio; intmes; intdia; } Los campos de un struct pueden ser de cualquier tipo simple o estructurado

  4. Registros en C: Structs Declaración del tipostructfecha y de la variable varFecha. Reservamemoriapara la variable. structfecha{ intanio; intmes; intdia; } varFecha; struct fecha fechaNacimiento, fechaCasamiento; Declaración de las variables fechaNacimientoy fechaCasamientode tipostructfecha. Cadadeclaraciónreservamemoria.

  5. Registros en C: Structs • No esobligatoriodarle un nombre al struct: struct { intanio; intmes; intdia; } varFecha; sin embargo, no lo vamos a poder usar en otra declaración. • Siempredebeestarpresente, al menos, el nombre de la estructura o el nombre de la variable.

  6. Operaciones con structs • Es posible asignar un struct a otro, siempre que sean del mismo tipo, pero no se pueden comparar: struct fecha{ intanio; int mes; intdia; } fechaNacimiento = { 1988, 10, 5}; struct fecha copiaFecha; copiaFecha = fechaNacimiento; /*OK*/ if (copiaFecha == fechaNacimiento) printf(“Iguales”); /* Error */

  7. Operaciones con structs • Obtener la dirección de un struct usando el operador de dirección (&). • Acceder a sus campos por medio de su selector. • Usar el operador sizeof para determinar su tamaño en bytes. • Los structs pueden ser pasados como parámetros de una función y pueden también ser devueltos como resultado.

  8. Inicialización de los structs • Una variable de tipo struct también puede inicializarse al momento de la declaración struct { intanio; int mes; intdia; } fechaNacimiento = { 1988, 10, 5} • Si faltan valores, inicializa en 0. • Si no se hace al momento de la declaración, entonces hay que hacerlo campo a campo.

  9. Acceso a los campos de un struct struct { intanio; int mes; intdia; } fechaNacimiento = { 1988, 10, 5}; fechaNacimiento.dia = 29; fechaNacimiento.mes = 6; printf(“La fecha de nacimiento de Juana es el %d/%d/%d\n”, fechaNacimiento.dia, fechaNacimiento.mes,fechaNacimiento.anio);

  10. Pasaje de un struct como parámetro de una función • Al igual que cualquier otra variable en C, las variables de tipo struct son pasadas por valor. • Para pasar un registro por dirección deberemos simular el pasaje por dirección anteponiendo el operador de dirección & al parámetro actual, declarando el parámetro formal de tipo puntero al struct y usando el operador * de desreferenciación o indirección dentro del cuerpo de la función.

  11. Ejemplo de pasaje de un struct como parámetro de una función #include <stdio.h> /* declaracion global del tipo struct fecha*/ struct fecha{ intanio; intmes; intdia; };

  12. voidmuestraFecha(struct fecha f){ printf("%d/%d/%d\n", f.dia, f.mes, f.anio); } struct fecha modificaFecha(struct fecha f){ f.dia = 29; f.mes = 6; f.anio = 2000; return f; } main(){ struct fecha fechaNacimiento = { 1988, 10, 5}; muestraFecha(fechaNacimiento); fechaNacimiento = modificaFecha(fechaNacimiento); muestraFecha(fechaNacimiento); return 0; } Pasajes por valor del struct fecha

  13. voidmuestraFecha(struct fecha f) { printf("%d/%d/%d\n", f.dia, f.mes, f.anio); } voidmodificaFecha(struct fecha *f) { (*f).dia = 29; (*f).mes = 6; (*f).anio = 2000; } main(){ struct fecha fechaNacimiento = { 1988, 10, 5}; muestraFecha(fechaNacimiento); modificaFecha(&fechaNacimiento); muestraFecha(fechaNacimiento); return 0; } Pasaje por dirección de struct fecha

  14. Uso de typedef • Permitecrearsinónimos o alias paratipos de datosyadefinidos: structfecha{ intanio; intmes; intdia; };  typedefstructfechaFecha ; voidmuestraFecha(Fecha f); voidmodificaFecha(Fecha *f); FechafecNac;

  15. Uso de typedef typedefstruct { intanio; intmes; intdia; } Fecha; voidmuestraFecha(Fecha f); voidmodificaFecha(Fecha *f); FechafecNac;

  16. Punteros a structs typedefstructtriangulo { float base; float altura; } Triangulo; Triangulo t = {5.0, 10.0}; Triangulo *pTriang; pTriang = &t;

More Related