570 likes | 849 Views
Datos estructurados. Programación en C para electrónicos. Índice. Punteros. Vectores. ( Arrays ) Matrices. Vectores multidimensionales. Cadenas de caracteres. Estructuras y Uniones. Tipos enumerados . Defini ción de nuevos tipos. Punteros. Programación en C para electrónica.
E N D
Datos estructurados Programación en C para electrónicos
Índice • Punteros. • Vectores. (Arrays) • Matrices. • Vectores multidimensionales. • Cadenas de caracteres. • Estructuras y Uniones. • Tipos enumerados. • Definición de nuevos tipos. Datos estructurados - David Carmona 2010
Punteros Programación en C para electrónica Datos estructurados - David Carmona 2010
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
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
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
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
Puntero void El puntero ip, primero apunta a una variable entera y después a una de tipo char. Datos estructurados - David Carmona 2010
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
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
Ejemplo: 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
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 Datos estructurados - David Carmona 2010
Ejemplo: Datos estructurados - David Carmona 2010
Vectores Programación en C para electrónica Datos estructurados - David Carmona 2010
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
Declaración de vectores. • Sintaxis: Tipo_datoNombre_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
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. 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
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
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_datoNombre_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
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
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 temperaturas temperatura [0][1]=27,6; Datos estructurados - David Carmona 2010
Inicialización • Sin agrupar filas: • Agrupando filas: Datos estructurados - David Carmona 2010
Vectores multidimensionales Datos estructurados - David Carmona 2010
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
Ejemplo Datos estructurados - David Carmona 2010
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. Datos estructurados - David Carmona 2010
Cadenas de caracteres Programación en C para electrónica Datos estructurados - David Carmona 2010
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
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
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
Declaración e inicialización • Sintaxis general: charNombre_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
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
Manejo de cadenas • La librería string.h incorpora funciones para el manejo de cadenas de caracteres: Datos estructurados - David Carmona 2010
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
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… Datos estructurados - David Carmona 2010
Estructuras y uniones Programación en C para electrónica Datos estructurados - David Carmona 2010
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
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
Sintaxis Datos estructurados - David Carmona 2010
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
Ejemplos Datos estructurados - David Carmona 2010
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
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
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: structcliente cliente1,Nuevo_cliente; … Nuevo_cliente = cliente1; Datos estructurados - David Carmona 2010
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
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. Datos estructurados - David Carmona 2010
Tipos enumerados Programación en C para electrónica Datos estructurados - David Carmona 2010
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