En esta entrada, hablaremos acerca de las estructuras (o registros) en el lenguaje C; que son conjuntos heterogéneos de datos donde cada elemento de los mismos (campos) es accesible mediante un identificador.
Antes de empezar:
Las estructuras son una de las opciones con más potencial que nos ofrece C, ya que gracias a ellas podremos realizar muchas cosas que hasta el momento no podíamos con todos los tipos de datos y sus derivados que fuimos explicando hasta el momento.
Además, constituyen una base importante sobre la que luego se desarrolló la programación orientada a objetos, generalizando este concepto en C++ con las llamadas clases como veremos a su debido tiempo. Por lo que imaginen lo importantes que son.
Definiendo una estructura:
Luego de aclarar la importancia de estas estructuras, veamos cómo definirlas para luego poder utilizarlas.
Para definirlas lo haremos arriba de la función main y utilizaremos la palabra reservada struct usando la siguiente sintaxis:
Donde el nombre de la estructura será el que elijamos y los campos (o miembros) serán los elementos que contendrá nuestra estructura.
Veamos un ejemplo:
Creamos una estructura "persona" que tendrá como campos el nombre, edad y nacionalidad de la persona en cuestión, donde los campos son dos cadenas de caracteres (nombre y nacionalidad) y un entero (edad).
Notamos que los campos son variables que se declaran de la misma manera que ya vimos en entradas anteriores. Y que al crear la estructura estamos creando un nuevo tipo de dato estructurado.
Declarando una variable de tipo struct:
Una vez definida nuestra estructura, podemos crear una variable de este nuevo tipo de dato estructurado, para ello simplemente declararemos una variable como cualquier otra anteponiendo como tipo de dato la palabra "struct" y el nombre de la estructura.
En el ejemplo anterior, si quisiéramos crear una "persona1" simplemente colocaríamos:
Con esto se reserva el espacio de memoria necesario para almacenar una variable de nuestro tipo "struct persona" que podrá almacenar dos cadenas de caracteres de hasta 20 caracteres (en realidad 19 y el caracter nulo) y un entero.
Accediendo a los campos de una variable de tipo struct:
Para acceder a los campos de una variable de tipo struct utilizaremos el operador "." entre el identificador de nuestra variable y el del campo correspondiente. Explicado así podría parecer un poco confuso si aún no se tienen claros los conceptos, pero es bastante simple como vemos en el ejemplo siguiente:
Aquí accedemos al campo edad de nuestra variable persona1 de tipo struct y le asignamos un valor de tipo entero. Lo mismo haríamos para los demás campos.
También podemos realizar la misma asignación al declarar la variable de la manera que vemos a continuación:
Arreglos de estructuras:
Como podíamos crear arrays de diferentes tipos, también podríamos crear uno donde cada elemento del array sea del tipo struct:
Y donde para acceder a los datos correspondientes a cada persona del array (nombre, edad, nacionalidad) lo haremos mediante el índice como en cualquier array pero debemos agregar el campo correspondiente luego del operador punto:
Copiando una variable de tipo struct:
A diferencia de los arrays donde no podíamos hacer una copia mediante asignación directa (sino que debíamos copiar cada elemento) las estructuras sí nos permiten hacerlo, por lo que si colocamos:
La variable persona2 tendría todos los campos iguales que persona1.
Punteros a estructuras:
Para terminar, también podemos definir punteros a estructuras de la misma manera que hacíamos con otros tipos de datos.
Veamos cómo creando un puntero a nuestra variable persona1 de tipo struct:
Hasta aquí no hay diferencia con lo que ya conocíamos, pero si queremos acceder al contenido de alguno de los campos de nuestra variable de tipo struct a través del puntero utilizaremos un nuevo operador que se conoce como operador flecha (->).
Entonces si quisiéramos por ejemplo acceder mediante el puntero al nombre de persona1 haríamos:
Si queremos acceder a los campos mediante el operador punto como hacíamos hasta ahora pero usando el puntero, haríamos:
En las próximas entradas seguiremos avanzando en el lenguaje C y también colocaremos varios ejemplos típicos y algoritmos famosos explicados paso a paso donde usaremos todo lo aprendido.
Antes de empezar:
Las estructuras son una de las opciones con más potencial que nos ofrece C, ya que gracias a ellas podremos realizar muchas cosas que hasta el momento no podíamos con todos los tipos de datos y sus derivados que fuimos explicando hasta el momento.
Además, constituyen una base importante sobre la que luego se desarrolló la programación orientada a objetos, generalizando este concepto en C++ con las llamadas clases como veremos a su debido tiempo. Por lo que imaginen lo importantes que son.
Definiendo una estructura:
Luego de aclarar la importancia de estas estructuras, veamos cómo definirlas para luego poder utilizarlas.
Para definirlas lo haremos arriba de la función main y utilizaremos la palabra reservada struct usando la siguiente sintaxis:
Donde el nombre de la estructura será el que elijamos y los campos (o miembros) serán los elementos que contendrá nuestra estructura.
Veamos un ejemplo:
Creamos una estructura "persona" que tendrá como campos el nombre, edad y nacionalidad de la persona en cuestión, donde los campos son dos cadenas de caracteres (nombre y nacionalidad) y un entero (edad).
Notamos que los campos son variables que se declaran de la misma manera que ya vimos en entradas anteriores. Y que al crear la estructura estamos creando un nuevo tipo de dato estructurado.
Declarando una variable de tipo struct:
Una vez definida nuestra estructura, podemos crear una variable de este nuevo tipo de dato estructurado, para ello simplemente declararemos una variable como cualquier otra anteponiendo como tipo de dato la palabra "struct" y el nombre de la estructura.
En el ejemplo anterior, si quisiéramos crear una "persona1" simplemente colocaríamos:
Con esto se reserva el espacio de memoria necesario para almacenar una variable de nuestro tipo "struct persona" que podrá almacenar dos cadenas de caracteres de hasta 20 caracteres (en realidad 19 y el caracter nulo) y un entero.
Accediendo a los campos de una variable de tipo struct:
Para acceder a los campos de una variable de tipo struct utilizaremos el operador "." entre el identificador de nuestra variable y el del campo correspondiente. Explicado así podría parecer un poco confuso si aún no se tienen claros los conceptos, pero es bastante simple como vemos en el ejemplo siguiente:
Aquí accedemos al campo edad de nuestra variable persona1 de tipo struct y le asignamos un valor de tipo entero. Lo mismo haríamos para los demás campos.
También podemos realizar la misma asignación al declarar la variable de la manera que vemos a continuación:
O directamente podemos declarar todos los campos de persona1 en el orden correspondiente:
Como podíamos crear arrays de diferentes tipos, también podríamos crear uno donde cada elemento del array sea del tipo struct:
Y donde para acceder a los datos correspondientes a cada persona del array (nombre, edad, nacionalidad) lo haremos mediante el índice como en cualquier array pero debemos agregar el campo correspondiente luego del operador punto:
Copiando una variable de tipo struct:
A diferencia de los arrays donde no podíamos hacer una copia mediante asignación directa (sino que debíamos copiar cada elemento) las estructuras sí nos permiten hacerlo, por lo que si colocamos:
La variable persona2 tendría todos los campos iguales que persona1.
Punteros a estructuras:
Para terminar, también podemos definir punteros a estructuras de la misma manera que hacíamos con otros tipos de datos.
Veamos cómo creando un puntero a nuestra variable persona1 de tipo struct:
Hasta aquí no hay diferencia con lo que ya conocíamos, pero si queremos acceder al contenido de alguno de los campos de nuestra variable de tipo struct a través del puntero utilizaremos un nuevo operador que se conoce como operador flecha (->).
Entonces si quisiéramos por ejemplo acceder mediante el puntero al nombre de persona1 haríamos:
Si queremos acceder a los campos mediante el operador punto como hacíamos hasta ahora pero usando el puntero, haríamos:
En las próximas entradas seguiremos avanzando en el lenguaje C y también colocaremos varios ejemplos típicos y algoritmos famosos explicados paso a paso donde usaremos todo lo aprendido.
Comentarios
Publicar un comentario