datos estructurados programación en c para electrónicos
TRANSCRIPT
DATOS ESTRUCTURADOS
Programación en C para electrónicos
Datos estructurados - David Carmona 2010
2
Índice
Punteros. Vectores. (Arrays)
Matrices. Vectores multidimensionales.
Cadenas de caracteres. Estructuras y Uniones. Tipos enumerados. Definición de nuevos tipos.
4
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Punteros
Datos estructurados - David Carmona 2010
5
Punteros
Un puntero es una variable que puede almacenar una dirección de memoria. Normalmente los punteros contienen la
dirección de memoria de otra variable. Los punteros apuntan a una variable
cuando contienen la dirección de memoria de dicha variable.
Datos estructurados - David Carmona 2010
6
Operadores
En la declaración y uso de los punteros se utilizan los operadores * y & (unarios) . & (dirección):
Permite obtener la dirección de memoria de una variable.
* (indirección): Permite obtener el contenido de una dirección
de memoria. También se utiliza para la declaración de
punteros.
Datos estructurados - David Carmona 2010
7
Declaración de punteros
Sintaxis:Tipo_dato * Nombre_Puntero
Un puntero debe estar asociado a un tipo de dato concreto. No pueden asignarse a un puntero
direcciones de datos de distinto tipo. Cuando asignamos un tipo a un puntero
indicamos la cantidad de memoria que ocupa el dato a partir de la dirección de memoria.
Datos estructurados - David Carmona 2010
8
Tipos de punteros
Los punteros se pueden declarar de cualquier tipo de dato de C. int, char, float….
El tipo de dato utilizado en la declaración de un puntero debe ser del mismo tipo que las variables a las puede apuntar.
El tipo de datos void, define un puntero genérico cuyo tipo es el del tipo de la variable a la que apunta.
Datos estructurados - David Carmona 2010
9
Puntero void
El puntero ip, primero apunta a una variable entera y después a una de tipo char.
Datos estructurados - David Carmona 2010
10
Asignación de direcciones
El operador & permite obtener la dirección que ocupa una variable en memoria.
Los tipos del puntero y la variable deben ser el mismo (excepto void).
Ejemplo:
Datos estructurados - David Carmona 2010
11
Indirección
Indirección es la forma de hacer referencia al valor de una variable a través de un puntero que apunta a dicha variable.
Para acceder al valor contenido en la dirección de memoria apuntada por un puntero se utiliza el operador *.
Ejemplo:*puntero=172;
//asigna el valor 172 a la p. mem. apuntada
Datos estructurados - David Carmona 2010
12
Ejemplo:
13
Datos estructurados - David Carmona 2010
Operaciones con punteros
Asignación entre punteros: Podemos asignar un puntero
a otro siempre que sean del mismo tipo.
Después de la asignación ambos punteros contienen la misma dirección por lo tanto apuntan a la misma variable.
Datos estructurados - David Carmona 2010
14
Operaciones con punteros
Aritmética de punteros: Sumar un valor a un puntero implica el
incremento de la posición de memoria a la que apunta.
El incremento en la dirección se hace en múltiplos del tamaño del tipo de dato. Si a un puntero de tipo float (4 bytes) contiene
la dirección 1007, y se le suma 1 (puntero++) la dirección apuntada pasará a ser 1011
15
Datos estructurados - David Carmona 2010
Ejemplo:
Dirección
valor
1000short a
1001
1002short b
1003
1004short c
1005
1006short d
1007
1008
float r1009
1010
1011
16
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Vectores
Datos estructurados - David Carmona 2010
17
Vectores
Un vector o array, es un grupo de datos del mismo tipo que ocupan posiciones de memoria contiguas.
Los datos de un vector se encuentran agrupados bajo un mismo identificador (nombre).
Para acceder a cada elemento del vector se utilizan subíndices. (nº de elemento del vector)
Datos estructurados - David Carmona 2010
18
Declaración de vectores.
Sintaxis:Tipo_dato Nombre_vector [tamaño]
Donde: Tipo_dato es el tipo de dato de todos los
elementos del vector. Nombre_vector es el identificador. tamaño es el número de elementos del
vector.
Datos estructurados - David Carmona 2010
19
Declaración de vectores.
Ejemplo:float temperaturas [100];
//vector para almacenar 100 temperaturas Inicialización:
Los vectores se pueden inicializar en la declaración encerrando la lista de valores entre llaves y separando cada elemento por comas.
20
Datos estructurados - David Carmona 2010
Acceso a los elementos
Para acceder a un elemento del vector, se utiliza su nombre y un índice. Valor o expresión entera.
El primer elemento del vector tiene índice 0 y el último; tamaño-1. El índice debe estar siempre entre estos dos
valores.
Datos estructurados - David Carmona 2010
21
Acceso a los elementos
Ejemplos:
int contador[10];…contador[0]=10;contador[i+1]=127;int b=contador[9];contador[x]=7;
Datos estructurados - David Carmona 2010
23
Matrices
Una matriz es un vector de dos dimensiones.
Los conceptos de acceso, consulta e inicialización de elementos es similar a los de los vectores.
Sintaxis de la declaración:Tipo_dato Nombre_vector [tamaño_x]
[tamaño_y] tamaño_x y tamaño_y representan el
numero de filas y columnas de la matriz respectivamente.
Datos estructurados - David Carmona 2010
24
Almacenamiento
Los elementos de una matriz se almacenen en memoria por filas. A continuación del último elemento de una
fila se almacena el primer elemento de la fila siguiente.
Datos estructurados - David Carmona 2010
25
Asignación y consulta
Para acceder a un elemento se utiliza el nombre de la matriz y dos índices (uno por dimensión) entre corchetes. El valor del índice de cada dimensión oscila
entre el 0 y el tamaño de la dimensión menos 1.
Ejemplo:float temperaturas [10][10];
//matriz para almacenar 100 temperaturastemperatura [0][1]=27,6;
Datos estructurados - David Carmona 2010
26
Inicialización
Sin agrupar filas:
Agrupando filas:
Datos estructurados - David Carmona 2010
27
Vectores multidimensionales
Datos estructurados - David Carmona 2010
28
Punteros y vectores
En C el nombre de un vector se trata como un puntero que contiene la dirección del primer elemento del vector. El nombre del vector es una constante de
tipo puntero que no puede ser modificada. Se permite el uso de punteros que
contengan direcciones de elementos del vector para acceder a ellos utilizando la aritmética de punteros.
Datos estructurados - David Carmona 2010
29
Ejemplo
Datos estructurados - David Carmona 2010
30
Punteros y vectores
En un puntero que apunta a los elementos de una tabla, pueden usarse los corchetes para indexar dichos elementos, como en un vector:
Este tipo de indexaciones solo es válido si el puntero apunta al vector.
No se comprueba si el puntero apunta al vector o fuera de el.
31
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Cadenas de caracteres
Datos estructurados - David Carmona 2010
32
Cadenas de caracteres
Una cadena de caracteres es un vector de tipo char. Se les conoce como string.
Las cadenas de caracteres son tratadas de forma especial.
En C existe un archivo de cabecera (string.h) con funciones especializadas en el manejo de cadenas de caracteres.
Datos estructurados - David Carmona 2010
33
Cadenas de caracteres
Para que un vector sea considerado como cadena de caracteres debe finalizar con el carácter nulo (ASCII 0). El contenido a partir del carácter nulo se
ignora.
Para declarar una cadena de caracteres de tamaño N hay que reservar memoria N+1 caracteres.
Datos estructurados - David Carmona 2010
34
Declaración e inicialización
En la declaración se puede inicializar la cadena como hasta ahora:
En el caso de las cadenas, la forma equivalente es:
El compilador inserta caracteres nulos (\0) después del último carácter de la asignación.
Datos estructurados - David Carmona 2010
35
Declaración e inicialización
Sintaxis general:char Nombre_Cadena [ tamaño ] =
“Cadena”; Ejemplo:
char ciudad [30] = “Valencia”; Se puede obviar el tamaño de la cadena
en la declaración El compilador reservará el espacio justo
para albergar la cadena.char ciudad [] = “Valencia”;
Datos estructurados - David Carmona 2010
36
Cadena vacía (“”)
Una cadena vacía es aquella que consta únicamente del carácter nulo (\0)
Los caracteres siguientes al carácter nulo son ignorados. Para vaciar una cadena basta con asignar
el carácter nulo al primer carácter de la cadena.
Datos estructurados - David Carmona 2010
37
Manejo de cadenas
La librería string.h incorpora funciones para el manejo de cadenas de caracteres:
Datos estructurados - David Carmona 2010
38
E/S de cadenas
Las funciones printf y scanf disponen de un formato especial para cadenas de caracteres (%s)
Este formato permite capturar del teclado cadenas que no contengan espacios, tabuladores o saltos de línea.
Datos estructurados - David Carmona 2010
39
E/S de cadenas
Además, la librería stdio.h dispone de otras funciones para tratamiento de cadenas en la entrada y salida:
Estas funciones permiten la entrada de cadenas que contengan espacios, tabuladores…
40
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Estructuras y uniones
Datos estructurados - David Carmona 2010
41
Estructura
Una estructura es un conjunto de datos de distintos tipos que ocupan posiciones de memoria contiguas.
Los elementos (campos) de una estructura pueden ser de cualquier tipo de los vistos hasta ahora.
Los elementos de una estructura se referencian a través del nombre de la misma.
Datos estructurados - David Carmona 2010
42
Definición
La definición de una estructura requiere especificar el nombre y tipo de todos los campos de la estructura.
Para la definición de la estructura se utiliza la palabra reservada struct.
Una vez definida la estructura, se pueden crear tantos datos de la estructura como se quieran. El nombre de la estructura se utiliza como un
tipo de dato más a la hora de declarar variables de ese tipo.
Datos estructurados - David Carmona 2010
43
Sintaxis
Datos estructurados - David Carmona 2010
44
Declaración de variables
Se utiliza la palabra reservada struct y el nombre de la estructura.
También se pueden declarar variables de la estructura creada en la definición de la misma.
Datos estructurados - David Carmona 2010
45
Ejemplos
Datos estructurados - David Carmona 2010
46
Acceso a los campos
Para acceder a un campo de una
estrutura se utiliza el operador . (punto) La forma general de acceso a campos es
:Variable.nombre_campo
Ejemplo:Nuevo_cliente.dni = 12345678;
Datos estructurados - David Carmona 2010
47
Inicialización
Se puede asignar valor a todos los campos de la variable en el momento de declararla. Se encierran entre llaves los valores y se
separan con comas (,) en el mismo orden de la definición.
Ejemplo:
Datos estructurados - David Carmona 2010
48
Copia y comparación
No se pueden comparar mediante los operadores relacionales variables del mismo tipo de estructura. Se deben comparar los campos
individualmente. Se pueden copiar todos los campos de
una variable a otra mediante la asignación simple:struct cliente cliente1,Nuevo_cliente;
…Nuevo_cliente = cliente1;
Datos estructurados - David Carmona 2010
49
Uniones
Pueden contener varios campos de distinto tipo.
Todos los campos de la unión comparten espacio de memoria. Una variable de este tipo solo puede
almacenar el valor de uno de los campos. La unión ocupa el mismo espacio de
memoria que el campo de mayor tamaño.
Datos estructurados - David Carmona 2010
50
Definición
La definición y declaración de variables de una unión es análoga al de las estructuras. Se utiliza la palabra reservada union.
51
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Tipos enumerados
Datos estructurados - David Carmona 2010
52
Tipos enumerados
Es un conjunto ordenado de constantes enteras a las que se le asigna un nombre.
Los nombres representan todos los valores que puede tomar la variable.
El compilador les asigna un valor entero según el orden de las constantes y empezando por 0.
Datos estructurados - David Carmona 2010
53
Definición
Se utiliza la palabra reservada enum, seguida del nombre de la enumeración y de la lista de nombres de las constantes.
Ejemplo:
enum Nombre_Enum { Const1, Const2, … ConstN};
Datos estructurados - David Carmona 2010
54
Declaración de variables
La declaración de variables enumeradas puede hacerse en la definición:
O posteriormente utilizando la siguiente sintaxis:
enum dia_semana { Lunes, Martes, Miercoles, Jueves, Viernes, Sabado,Domingo} dia;
enum dia_semana dia;
Datos estructurados - David Carmona 2010
55
Cambio de valores
Por defecto, a los nombres se les asigna un valor entero, por orden de aparición en la definición y empezando desde 0.
Se puede cambiar el valor por defecto mediante asignaciones en la definición.
56
Datos estructurados - David Carmona 2010
Programación en C para electrónica
Definición de nuevos tipos.
Datos estructurados - David Carmona 2010
57
typedef
El lenguaje C permite definir nuevos tipos de datos basados en los tipos vistos hasta ahora.
Para definir los nuevos tipos se utiliza la palabra reservada typedef, con la siguiente sintaxis:
Una vez definido el nuevo tipo, el nombre se puede utilizar como tipo de datos en la declaración de variables.
typedef tipo_datos Nombre_nuevo_tipo;
Datos estructurados - David Carmona 2010
58
Ejemplos: