SlideShare una empresa de Scribd logo
1
07 - Tipos de datos definidos por el
programador
Diego Andrés Alvarez Marín
Profesor Asociado
Universidad Nacional de Colombia
Sede Manizales
2
Temario
● Definición de tipos (typedef)
● Estructuras (struct)
● Uniones (union)
● Enumeraciones (enum)
● Campos de bits
3
typedef
Se utiliza para asignar nombres (alternos) a los
tipos de datos. La forma general de uso de este
comando es:
Ejemplo:
El standard POSIX (http://en.wikipedia.org/wiki/POSIX)
solicita que el nombre de un typedef no termine en
_t, ya que ellos lo usan en sus declaraciones
(recuerde a clock_t, size_t).
4
Enumeraciones
Es un tipo de dato especial que sirve para
guardar constantes enteras y asignarles un
nombre.
0 1 2
3 4 5 6
6 7 8 14
-5 -4 -3
5
Declaración de variables tipo enum
6
7
enum + switch + warning
No hay default, ni una opción
para Guardar ni para Cerrar
8
Utilizando enumeraciones en un
ciclo for
9
Estructuras (struct)
Una estructura es un conjuto de variables de
diferentes tipos relacionadas bajo un mismo
nombre
10
Declaración de
variables tipo struct
11
Inicialización de
estructuras
(gcc GNU extension)
12
Inicialización de arreglos de
estructuras
13
Accediendo a los miembros de una
estructura
Usando el
operador punto “.”
Utilizando
punteros: el
operador flecha
“->”
(NOTA: ver definiciones de struct punto y struct circulo en las diapositivas anteriores)
14
Ejemplo con estructuras
Ver:
http://programaciondecomputadoresunalmzl.wikispaces.com/file/detail/07_struct.c
15
Compound literals
Note que p1 y p2 no se inicializaron; en la líneas 15
y 16 se está separando y a la vez asignando el
espacio de memoria para p1 y p2 respectivamente.
Esta asignación sólo es válida en el bloque { } en el
cual se utilizó el compound literal.
a los campos
no
inicializados
se les asigna
ceros
16
Structures get copied, arrays get aliased
Aliasing: <programming> Two names (identifiers), usually of
local or global variables, that refer to the same resource
(memory location) are said to be aliased. Although names
introduced in programming languages are typically mapped to
different memory locations, aliasing can be introduced by the
use of address arithmetic and pointers or language-specific
features, like C/C++ references.
d1.x and d2.x are aliased.
17
El tamaño de una estructura
Es igual o mayor al tamaño de la suma de sus
miembros; esto puede ser debido a que el
computador agrega bytes de más a la estructura
(padding) para acelerar el acceso del computador a
la memoria. Varía con respecto al computador y al
sistema operativo.
En el gcc se puede desactivar el padding con opción
del compilador -fpack-struct Tenga en cuenta que
esto disminuye la velocidad de acceso a la memoria
18
Padding, alignment, packing
Hecho en
GNU/Linux de 32
bits
19
Padding
Padding hace un alineamiento de los miembros
de la estructura de modo que las direcciones de
memoria se alineen a 4 bytes o a 8 bytes,
dependiendo si se tiene un sistema operativo de
32 o de 64 bits. Observe que las direcciones de
memoria asignadas son divisibles entre 4 u 8
dependiendo del sistema operativo: ej:
0x80496ac == 134518444, el cual es un número
divisible entre cuatro (ejecutado en GNU/Linux de
32 bits).
20
21
Packing
Empaqueta todo sin dejar espacios. El packing se
debe hacer en los siguientes casos:
1) Cuando se debe sacrificar la velocidad del
código a cambio de utilizar mejor la memoria
RAM, en el caso que la memoria esté escasa.
2) Cuando se estén grabando estructuras a un
archivo. En este caso el PADDING se debe
desactivar y utilizar PACKING ya que si el archivo
se lee en un computador con un sistema
operativo diferente al sistema operativo que
escribió el archivo podrían haber errores en la
lectura de la estructura.
22
23
Offset de un elemento: offsetof()
offsetof(tipo,miembro)
Este macro, definido en stddef.h, retorna el
desplazamiento (“offset”) en bytes del elemento
miembro de una struct, o union tipo, contado a
partir del principio de la estructura.
24
Los operadores
== y != no
funcionan con
estructuras. Si se
quieren comparar
dos estructuras, la
comparación debe
hacerse miembro
a miembro.
Comparación de estructuras
25
No compare estructuras con
memcmp()
Algunos programadores incorrectamente
comparan estructuras utilizando:
memcmp(&struct1, &struct2, sizeof(struct1));
Esto es incorrecto, ya que no se está teniendo
encuenta que el padding entre los campos de las
estructuras tiene un valor indeterminado. De otro,
lado, en el caso que existan estructuras sin el
padding, habrían problemas comparando
punteros, doubles, floats, valores NAN, etc.
Por esta razón es preferible crear una función que
compare dos estructuras miembro a miembro.
26
Como hacer una función que
devuelva más de dos variables?
1. Pasando punteros
27
Como hacer una función que
devuelva más de dos variables?
2. Retornando una estructura que contiene los
valores deseados:
28
Como hacer una función que
devuelva más de dos variables?
3. Utilizar un híbrido: pasar un puntero a una
estructura, que posteriormente es llenada:
void
29
Arrays de estructuras
struct punto
{
int x, y;
};
struct punto p[3];
Los elementos se pueden inicializar así:
struct punto p[3] = { {2, 3}, {4, 5}, {6, 7} };
Para acceder a los elementos se hace lo
siguiente:
struct punto p[3];
p[0].x = 2;
p[0].y = 3;
30
Funciones
que retornan
vectores
Si se utiliza esta técnica
se debe tener en cuenta
que “vector” se está
creando en la memoria
de pila y el tamaño de
esta es limitada.
31
Uniones (union)
● Se utilizan para guardar varias variables de
diferentes tipos en el mismo espacio de
memoria, por lo tanto si se asigna un valor a una
variable, se sobreescribe el valor en las otras.
● Su tamaño es igual al tamaño de su elemento
más grande: sizeof(mi_union) = sizeof(double)
● El compilador no verifica si los datos se están
leyendo de la forma correcta.
32
Declaración de
variables tipo union
33
Inicialización de uniones
Se puede inicializar la
primera variable de la
unión cuando se
declara:
En este ejemplo el primer elemento (u1.c) se
inicializa a 'm', pero union.x se deja "quieto".
También se puede inicializar cualquier otro
miembro de la unión:
34
Accediendo a los miembros de una
unión
Se hace utilizando el operador punto "."
Aquí u1.x sobreescribe u1.c
35
En este caso la unión nos permite
crear un truco que permite
devolver cualquier tipo de dato
unión
anónima
36
Ejemplo uniones para entender la
representación interna de un
número float
Ver un buen ejemplo de uniones en:
http://tipsparaisc.blogspot.com/2012/12/representacion-interna-de-un-flotante.html
37
Arrays de uniones
union u
{
int i;
float f;
};
union u x[3];
Los tres primeros miembros de x se pueden
inicializar como:
union u x[3] = { {3}, {4}, {5} };
(los brackets internos son opcionales)
Los elementos se acceden así:
x[0].i = 2;
38
Campos de bits
Son estructuras cuyos miembros son paquetes de
bits. Se utilizan para representar enteros de
tamaño conocido. Se utilizan especialmente para
"comprimir datos", o para representar series de
bits en paquetes llamados "banderas" (flags). Se
pueden crear utilizando unsigned int, signed int o
_Bool.
39
40
Falta explicar estos comandos
definidos en el C11
_Alignas
_Alignof
_Atomic
_Generic
_Noreturn
_Static_assert
_Thread_local
Material basado en:
http://www.slideshare.net/amraldo/introduction-to-c-p
http://www.slideshare.net/petdance/just-enough-c-for
http://www.gnu.org/software/gnu-c-manual/gnu-c-man
Wikipedia

Más contenido relacionado

La actualidad más candente

Tema 1.1 fundamentos de los sistemas digitales
Tema 1.1 fundamentos de los sistemas digitalesTema 1.1 fundamentos de los sistemas digitales
Tema 1.1 fundamentos de los sistemas digitales
Alban Avila
 
2nd puc computer science chapter 8 function overloading
 2nd puc computer science chapter 8   function overloading 2nd puc computer science chapter 8   function overloading
2nd puc computer science chapter 8 function overloading
Aahwini Esware gowda
 
Declaraciones, variables y constantes(2 2)
Declaraciones, variables y constantes(2 2)Declaraciones, variables y constantes(2 2)
Declaraciones, variables y constantes(2 2)
IrvinOrta
 
Unidad 4 electronica_digital_v1_c
Unidad 4 electronica_digital_v1_cUnidad 4 electronica_digital_v1_c
Unidad 4 electronica_digital_v1_cmalvariol
 
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMASCUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
ValeriaBerrones
 
Lógica y Algoritmos 4. estructuras secuenciales y selectivas
Lógica y Algoritmos 4. estructuras secuenciales y selectivasLógica y Algoritmos 4. estructuras secuenciales y selectivas
Lógica y Algoritmos 4. estructuras secuenciales y selectivasEdward Ropero
 
C++ language basic
C++ language basicC++ language basic
C++ language basic
Waqar Younis
 
Algoritmo con ciclos repetitivos
Algoritmo con ciclos repetitivosAlgoritmo con ciclos repetitivos
Algoritmo con ciclos repetitivosgabriela puerta
 
Estructuras cíclicas o repetitivas en la programación
Estructuras cíclicas o repetitivas en la programaciónEstructuras cíclicas o repetitivas en la programación
Estructuras cíclicas o repetitivas en la programaciónPandora412
 
Jerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoJerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismo
Edwin Loayza
 
Circuitos secuenciales=u.o
Circuitos secuenciales=u.oCircuitos secuenciales=u.o
Circuitos secuenciales=u.o
Willianjavier nieto
 
Unidad1 sd2
Unidad1 sd2Unidad1 sd2
Unidad1 sd2haibsel
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4Luis Zurita
 
Strings Functions in C Programming
Strings Functions in C ProgrammingStrings Functions in C Programming
Strings Functions in C Programming
DevoAjit Gupta
 
Electrónica digital: Comparadores
Electrónica digital: ComparadoresElectrónica digital: Comparadores
Electrónica digital: Comparadores
SANTIAGO PABLO ALBERTO
 
Representacion de datos
Representacion de datosRepresentacion de datos
Representacion de datos
JOSE MENDOZA
 

La actualidad más candente (20)

Tema 1.1 fundamentos de los sistemas digitales
Tema 1.1 fundamentos de los sistemas digitalesTema 1.1 fundamentos de los sistemas digitales
Tema 1.1 fundamentos de los sistemas digitales
 
Algoritmos secuenciales resueldos
Algoritmos  secuenciales resueldosAlgoritmos  secuenciales resueldos
Algoritmos secuenciales resueldos
 
2nd puc computer science chapter 8 function overloading
 2nd puc computer science chapter 8   function overloading 2nd puc computer science chapter 8   function overloading
2nd puc computer science chapter 8 function overloading
 
Declaraciones, variables y constantes(2 2)
Declaraciones, variables y constantes(2 2)Declaraciones, variables y constantes(2 2)
Declaraciones, variables y constantes(2 2)
 
Unidad 4 electronica_digital_v1_c
Unidad 4 electronica_digital_v1_cUnidad 4 electronica_digital_v1_c
Unidad 4 electronica_digital_v1_c
 
Circuitos secuenciales
Circuitos secuencialesCircuitos secuenciales
Circuitos secuenciales
 
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMASCUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
 
Lógica y Algoritmos 4. estructuras secuenciales y selectivas
Lógica y Algoritmos 4. estructuras secuenciales y selectivasLógica y Algoritmos 4. estructuras secuenciales y selectivas
Lógica y Algoritmos 4. estructuras secuenciales y selectivas
 
Ternary operator
Ternary operatorTernary operator
Ternary operator
 
C++ language basic
C++ language basicC++ language basic
C++ language basic
 
Arreglos unidimensionales
Arreglos unidimensionalesArreglos unidimensionales
Arreglos unidimensionales
 
Algoritmo con ciclos repetitivos
Algoritmo con ciclos repetitivosAlgoritmo con ciclos repetitivos
Algoritmo con ciclos repetitivos
 
Estructuras cíclicas o repetitivas en la programación
Estructuras cíclicas o repetitivas en la programaciónEstructuras cíclicas o repetitivas en la programación
Estructuras cíclicas o repetitivas en la programación
 
Jerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoJerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismo
 
Circuitos secuenciales=u.o
Circuitos secuenciales=u.oCircuitos secuenciales=u.o
Circuitos secuenciales=u.o
 
Unidad1 sd2
Unidad1 sd2Unidad1 sd2
Unidad1 sd2
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
 
Strings Functions in C Programming
Strings Functions in C ProgrammingStrings Functions in C Programming
Strings Functions in C Programming
 
Electrónica digital: Comparadores
Electrónica digital: ComparadoresElectrónica digital: Comparadores
Electrónica digital: Comparadores
 
Representacion de datos
Representacion de datosRepresentacion de datos
Representacion de datos
 

Destacado

06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
Diego Andrés Alvarez Marín
 
05 - Funciones en lenguaje C
05 - Funciones en lenguaje C05 - Funciones en lenguaje C
05 - Funciones en lenguaje C
Diego Andrés Alvarez Marín
 
Estructuras en C
Estructuras en CEstructuras en C
Estructuras en C
Vane Borjas
 
00/01 - Introduccion al curso y a la estadística descriptiva
00/01 - Introduccion al curso y a la estadística descriptiva00/01 - Introduccion al curso y a la estadística descriptiva
00/01 - Introduccion al curso y a la estadística descriptiva
Diego Andrés Alvarez Marín
 
Conceptos Básicos de la Estadística
Conceptos Básicos de la EstadísticaConceptos Básicos de la Estadística
Conceptos Básicos de la Estadística
hectorquintero
 
Estadística descriptiva e inferencial
Estadística descriptiva e inferencialEstadística descriptiva e inferencial
Estadística descriptiva e inferencial
Pedro López Eiroá
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
cristty_21
 
Uso de struct en c para el manejo de artículos de un inventario
Uso de struct en c para el manejo de artículos de un inventarioUso de struct en c para el manejo de artículos de un inventario
Uso de struct en c para el manejo de artículos de un inventarioHeydi Abrego
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datos
Juan Timoteo Cori
 
Algoritmos y programacion
Algoritmos y programacionAlgoritmos y programacion
Algoritmos y programacion
Leomar Salazar
 
Manual C++ 1era Parte
Manual C++ 1era ParteManual C++ 1era Parte
Manual C++ 1era Parte
Universidad de Guayaquil
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
AnesGy SD
 
FUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE CFUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE C
flaquita_dany
 
algoritmo y programacion
algoritmo y programacion algoritmo y programacion
algoritmo y programacion
Carlos Delgado
 
Ejercicios Resueltos en C
Ejercicios Resueltos en CEjercicios Resueltos en C
Ejercicios Resueltos en Csolucionescip
 
17. Chi Cuadrada
17. Chi Cuadrada17. Chi Cuadrada
17. Chi Cuadrada
Juan de Dios Díaz Rosales
 
Tt es dec03_paula1
Tt es dec03_paula1Tt es dec03_paula1
Tt es dec03_paula1
Ruralticnova
 
23. Como escribir un articulo científico
23. Como escribir un articulo científico23. Como escribir un articulo científico
23. Como escribir un articulo científico
Juan de Dios Díaz Rosales
 

Destacado (20)

06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
05 - Funciones en lenguaje C
05 - Funciones en lenguaje C05 - Funciones en lenguaje C
05 - Funciones en lenguaje C
 
Estructuras en C
Estructuras en CEstructuras en C
Estructuras en C
 
00/01 - Introduccion al curso y a la estadística descriptiva
00/01 - Introduccion al curso y a la estadística descriptiva00/01 - Introduccion al curso y a la estadística descriptiva
00/01 - Introduccion al curso y a la estadística descriptiva
 
Conceptos Básicos de la Estadística
Conceptos Básicos de la EstadísticaConceptos Básicos de la Estadística
Conceptos Básicos de la Estadística
 
Estadística descriptiva e inferencial
Estadística descriptiva e inferencialEstadística descriptiva e inferencial
Estadística descriptiva e inferencial
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Uso de struct en c para el manejo de artículos de un inventario
Uso de struct en c para el manejo de artículos de un inventarioUso de struct en c para el manejo de artículos de un inventario
Uso de struct en c para el manejo de artículos de un inventario
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datos
 
Algoritmos y programacion
Algoritmos y programacionAlgoritmos y programacion
Algoritmos y programacion
 
Manual C++ 1era Parte
Manual C++ 1era ParteManual C++ 1era Parte
Manual C++ 1era Parte
 
11 Funciones
11 Funciones11 Funciones
11 Funciones
 
Estructuras punteros
Estructuras punterosEstructuras punteros
Estructuras punteros
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
 
FUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE CFUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE C
 
algoritmo y programacion
algoritmo y programacion algoritmo y programacion
algoritmo y programacion
 
Ejercicios Resueltos en C
Ejercicios Resueltos en CEjercicios Resueltos en C
Ejercicios Resueltos en C
 
17. Chi Cuadrada
17. Chi Cuadrada17. Chi Cuadrada
17. Chi Cuadrada
 
Tt es dec03_paula1
Tt es dec03_paula1Tt es dec03_paula1
Tt es dec03_paula1
 
23. Como escribir un articulo científico
23. Como escribir un articulo científico23. Como escribir un articulo científico
23. Como escribir un articulo científico
 

Similar a 07 - Tipos de datos definidos por el programador en lenguaje C: struct, typedef, union

Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programaciondiego MC
 
ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++die_dex
 
Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02kevinwm17
 
Apuntes estructuras 1
Apuntes estructuras 1Apuntes estructuras 1
Apuntes estructuras 1pabesacv
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptx
PedroSilva456418
 
Estructuras basicas de_c_
Estructuras basicas de_c_Estructuras basicas de_c_
Estructuras basicas de_c_
erickaagarciarosales
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensambladorgbermeo
 
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
Diego Andrés Alvarez Marín
 
Tutorial de estructuras c#
Tutorial de estructuras c#Tutorial de estructuras c#
Tutorial de estructuras c#
elidetjc
 
Tutorial de estructuras c#
Tutorial de estructuras c#Tutorial de estructuras c#
Tutorial de estructuras c#
Joselyn Aguirre
 
Manuales de c#
Manuales de c#Manuales de c#
Manuales de c#
Joselyn Aguirre
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++
Bryangio2002
 
Julio evies computacion
Julio evies computacionJulio evies computacion
Julio evies computacion
Rosanna Rangel Burgos
 
C++
C++C++

Similar a 07 - Tipos de datos definidos por el programador en lenguaje C: struct, typedef, union (20)

Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programacion
 
ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02
 
Ambiente
 Ambiente Ambiente
Ambiente
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambiente de programacin en pascal
Ambiente de programacin en pascalAmbiente de programacin en pascal
Ambiente de programacin en pascal
 
Apuntes estructuras 1
Apuntes estructuras 1Apuntes estructuras 1
Apuntes estructuras 1
 
equipo 3 clasificación de estructura(2.pptx
equipo 3  clasificación de estructura(2.pptxequipo 3  clasificación de estructura(2.pptx
equipo 3 clasificación de estructura(2.pptx
 
Estructuras basicas de_c_
Estructuras basicas de_c_Estructuras basicas de_c_
Estructuras basicas de_c_
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
 
Tutorial de estructuras c#
Tutorial de estructuras c#Tutorial de estructuras c#
Tutorial de estructuras c#
 
Tutorial de estructuras c#
Tutorial de estructuras c#Tutorial de estructuras c#
Tutorial de estructuras c#
 
Manuales de c#
Manuales de c#Manuales de c#
Manuales de c#
 
presentacion Fermath
presentacion Fermathpresentacion Fermath
presentacion Fermath
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++
 
Julio evies computacion
Julio evies computacionJulio evies computacion
Julio evies computacion
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 

Más de Diego Andrés Alvarez Marín

Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
Diego Andrés Alvarez Marín
 
03 - Cadenas en Python 3
03 - Cadenas en Python 303 - Cadenas en Python 3
03 - Cadenas en Python 3
Diego Andrés Alvarez Marín
 
02 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 302 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 3
Diego Andrés Alvarez Marín
 
01 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 301 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 3
Diego Andrés Alvarez Marín
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
Diego Andrés Alvarez Marín
 
03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C
Diego Andrés Alvarez Marín
 
08 - Punteros en lenguaje C
08 - Punteros en lenguaje C08 - Punteros en lenguaje C
08 - Punteros en lenguaje C
Diego Andrés Alvarez Marín
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
Diego Andrés Alvarez Marín
 
07 – Estimación puntual e introducción a la estadística inferencial
07 – Estimación puntual e introducción a la estadística inferencial07 – Estimación puntual e introducción a la estadística inferencial
07 – Estimación puntual e introducción a la estadística inferencial
Diego Andrés Alvarez Marín
 
06 - Variables aleatorias conjuntas
06 - Variables aleatorias conjuntas06 - Variables aleatorias conjuntas
06 - Variables aleatorias conjuntas
Diego Andrés Alvarez Marín
 
04 - Funciones de distribución discretas
04 - Funciones de distribución discretas04 - Funciones de distribución discretas
04 - Funciones de distribución discretas
Diego Andrés Alvarez Marín
 
02 - Introducción a la teoría de probabilidad
02 - Introducción a la teoría de probabilidad02 - Introducción a la teoría de probabilidad
02 - Introducción a la teoría de probabilidad
Diego Andrés Alvarez Marín
 

Más de Diego Andrés Alvarez Marín (14)

Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
Alvarez (2023) - Teoría de la Elasticidad usando Matlab y Maxima - volumen 1 ...
 
03 - Cadenas en Python 3
03 - Cadenas en Python 303 - Cadenas en Python 3
03 - Cadenas en Python 3
 
02 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 302 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 3
 
01 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 301 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 3
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
 
03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C
 
08 - Punteros en lenguaje C
08 - Punteros en lenguaje C08 - Punteros en lenguaje C
08 - Punteros en lenguaje C
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
 
07 – Estimación puntual e introducción a la estadística inferencial
07 – Estimación puntual e introducción a la estadística inferencial07 – Estimación puntual e introducción a la estadística inferencial
07 – Estimación puntual e introducción a la estadística inferencial
 
06 - Variables aleatorias conjuntas
06 - Variables aleatorias conjuntas06 - Variables aleatorias conjuntas
06 - Variables aleatorias conjuntas
 
05 - Funciones de densidad de probabilidad
05 - Funciones de densidad de probabilidad05 - Funciones de densidad de probabilidad
05 - Funciones de densidad de probabilidad
 
04 - Funciones de distribución discretas
04 - Funciones de distribución discretas04 - Funciones de distribución discretas
04 - Funciones de distribución discretas
 
03 Variable Aleatoria
03   Variable Aleatoria03   Variable Aleatoria
03 Variable Aleatoria
 
02 - Introducción a la teoría de probabilidad
02 - Introducción a la teoría de probabilidad02 - Introducción a la teoría de probabilidad
02 - Introducción a la teoría de probabilidad
 

07 - Tipos de datos definidos por el programador en lenguaje C: struct, typedef, union

  • 1. 1 07 - Tipos de datos definidos por el programador Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales
  • 2. 2 Temario ● Definición de tipos (typedef) ● Estructuras (struct) ● Uniones (union) ● Enumeraciones (enum) ● Campos de bits
  • 3. 3 typedef Se utiliza para asignar nombres (alternos) a los tipos de datos. La forma general de uso de este comando es: Ejemplo: El standard POSIX (http://en.wikipedia.org/wiki/POSIX) solicita que el nombre de un typedef no termine en _t, ya que ellos lo usan en sus declaraciones (recuerde a clock_t, size_t).
  • 4. 4 Enumeraciones Es un tipo de dato especial que sirve para guardar constantes enteras y asignarles un nombre. 0 1 2 3 4 5 6 6 7 8 14 -5 -4 -3
  • 6. 6
  • 7. 7 enum + switch + warning No hay default, ni una opción para Guardar ni para Cerrar
  • 9. 9 Estructuras (struct) Una estructura es un conjuto de variables de diferentes tipos relacionadas bajo un mismo nombre
  • 13. 13 Accediendo a los miembros de una estructura Usando el operador punto “.” Utilizando punteros: el operador flecha “->” (NOTA: ver definiciones de struct punto y struct circulo en las diapositivas anteriores)
  • 15. 15 Compound literals Note que p1 y p2 no se inicializaron; en la líneas 15 y 16 se está separando y a la vez asignando el espacio de memoria para p1 y p2 respectivamente. Esta asignación sólo es válida en el bloque { } en el cual se utilizó el compound literal. a los campos no inicializados se les asigna ceros
  • 16. 16 Structures get copied, arrays get aliased Aliasing: <programming> Two names (identifiers), usually of local or global variables, that refer to the same resource (memory location) are said to be aliased. Although names introduced in programming languages are typically mapped to different memory locations, aliasing can be introduced by the use of address arithmetic and pointers or language-specific features, like C/C++ references. d1.x and d2.x are aliased.
  • 17. 17 El tamaño de una estructura Es igual o mayor al tamaño de la suma de sus miembros; esto puede ser debido a que el computador agrega bytes de más a la estructura (padding) para acelerar el acceso del computador a la memoria. Varía con respecto al computador y al sistema operativo. En el gcc se puede desactivar el padding con opción del compilador -fpack-struct Tenga en cuenta que esto disminuye la velocidad de acceso a la memoria
  • 18. 18 Padding, alignment, packing Hecho en GNU/Linux de 32 bits
  • 19. 19 Padding Padding hace un alineamiento de los miembros de la estructura de modo que las direcciones de memoria se alineen a 4 bytes o a 8 bytes, dependiendo si se tiene un sistema operativo de 32 o de 64 bits. Observe que las direcciones de memoria asignadas son divisibles entre 4 u 8 dependiendo del sistema operativo: ej: 0x80496ac == 134518444, el cual es un número divisible entre cuatro (ejecutado en GNU/Linux de 32 bits).
  • 20. 20
  • 21. 21 Packing Empaqueta todo sin dejar espacios. El packing se debe hacer en los siguientes casos: 1) Cuando se debe sacrificar la velocidad del código a cambio de utilizar mejor la memoria RAM, en el caso que la memoria esté escasa. 2) Cuando se estén grabando estructuras a un archivo. En este caso el PADDING se debe desactivar y utilizar PACKING ya que si el archivo se lee en un computador con un sistema operativo diferente al sistema operativo que escribió el archivo podrían haber errores en la lectura de la estructura.
  • 22. 22
  • 23. 23 Offset de un elemento: offsetof() offsetof(tipo,miembro) Este macro, definido en stddef.h, retorna el desplazamiento (“offset”) en bytes del elemento miembro de una struct, o union tipo, contado a partir del principio de la estructura.
  • 24. 24 Los operadores == y != no funcionan con estructuras. Si se quieren comparar dos estructuras, la comparación debe hacerse miembro a miembro. Comparación de estructuras
  • 25. 25 No compare estructuras con memcmp() Algunos programadores incorrectamente comparan estructuras utilizando: memcmp(&struct1, &struct2, sizeof(struct1)); Esto es incorrecto, ya que no se está teniendo encuenta que el padding entre los campos de las estructuras tiene un valor indeterminado. De otro, lado, en el caso que existan estructuras sin el padding, habrían problemas comparando punteros, doubles, floats, valores NAN, etc. Por esta razón es preferible crear una función que compare dos estructuras miembro a miembro.
  • 26. 26 Como hacer una función que devuelva más de dos variables? 1. Pasando punteros
  • 27. 27 Como hacer una función que devuelva más de dos variables? 2. Retornando una estructura que contiene los valores deseados:
  • 28. 28 Como hacer una función que devuelva más de dos variables? 3. Utilizar un híbrido: pasar un puntero a una estructura, que posteriormente es llenada: void
  • 29. 29 Arrays de estructuras struct punto { int x, y; }; struct punto p[3]; Los elementos se pueden inicializar así: struct punto p[3] = { {2, 3}, {4, 5}, {6, 7} }; Para acceder a los elementos se hace lo siguiente: struct punto p[3]; p[0].x = 2; p[0].y = 3;
  • 30. 30 Funciones que retornan vectores Si se utiliza esta técnica se debe tener en cuenta que “vector” se está creando en la memoria de pila y el tamaño de esta es limitada.
  • 31. 31 Uniones (union) ● Se utilizan para guardar varias variables de diferentes tipos en el mismo espacio de memoria, por lo tanto si se asigna un valor a una variable, se sobreescribe el valor en las otras. ● Su tamaño es igual al tamaño de su elemento más grande: sizeof(mi_union) = sizeof(double) ● El compilador no verifica si los datos se están leyendo de la forma correcta.
  • 33. 33 Inicialización de uniones Se puede inicializar la primera variable de la unión cuando se declara: En este ejemplo el primer elemento (u1.c) se inicializa a 'm', pero union.x se deja "quieto". También se puede inicializar cualquier otro miembro de la unión:
  • 34. 34 Accediendo a los miembros de una unión Se hace utilizando el operador punto "." Aquí u1.x sobreescribe u1.c
  • 35. 35 En este caso la unión nos permite crear un truco que permite devolver cualquier tipo de dato unión anónima
  • 36. 36 Ejemplo uniones para entender la representación interna de un número float Ver un buen ejemplo de uniones en: http://tipsparaisc.blogspot.com/2012/12/representacion-interna-de-un-flotante.html
  • 37. 37 Arrays de uniones union u { int i; float f; }; union u x[3]; Los tres primeros miembros de x se pueden inicializar como: union u x[3] = { {3}, {4}, {5} }; (los brackets internos son opcionales) Los elementos se acceden así: x[0].i = 2;
  • 38. 38 Campos de bits Son estructuras cuyos miembros son paquetes de bits. Se utilizan para representar enteros de tamaño conocido. Se utilizan especialmente para "comprimir datos", o para representar series de bits en paquetes llamados "banderas" (flags). Se pueden crear utilizando unsigned int, signed int o _Bool.
  • 39. 39
  • 40. 40 Falta explicar estos comandos definidos en el C11 _Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local