Bienvenidos sean a este post, hoy veremos las estructuras.
Las estructuras las podemos definir como tipos de datos definidos por el usuario, estas a su vez pueden contener varios tipos de datos iguales o distintos, estas nos permitiran representar un objeto mas complejo dado que es una coleccion, a su vez podemos integrar funciones para poder manipular estas estructuras, pero veamos como es su sintaxis mas basica:
struct nombre {
tipo_dato nombre_1;
tipo_dato nombre_2;
tipo_dato nombre_3;
...
tipo_dato nombre_N;
};
Usaremos la palabra struct seguido del nombre que sera el identificador, despues crearemos un bloque donde declararemos las distintas variables que contendra la estructura, para continuar entendiendo como es este tema y para ello vamos a crear un nuevo archivo que llamaremos ejemplo05.c y le agregaremos el siguiente codigo:
ejemplo05.c
#include <stdio.h>
struct Animal
{
int edad;
int peso;
char sexo[1];
};
int main()
{
struct Animal perro = {8, 25, "M"};
printf("Edad: %i\nPeso: %i\nSexo: %s\n",
perro.edad,
perro.peso,
perro.sexo);
return 0;
}
Para este codigo primero definiremos un struct llamado Animal, en este caso almacenaremos tres datos, como son la edad, el peso y el sexo del animal, para este caso le establecemos un tamaño de un solo caracter para que almacene la inicial del sexo, despues tenemos el main, y aqui tenemos esta linea:
struct Animal perro = {8, 25, "M"};
Esta sera la encargada de crear nuestro «objeto», primero pasaremos el tipo (struct), el identificador de la estructura (Animal) y el nombre del objeto (perro), luego debemos pasar los datos en el mismo orden que definimos a los elementos del struct, por ultimo mostramos los datos mediante el printf, en este caso observen que primero pasamos el nombre del objeto seguido del campo por medio de un punto, con todo esto podemos compilarlo y ver su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo05
Edad: 8
Peso: 25
Sexo: M
tinchicus@dbn001vrt:~/lenguajes/C$
Ahora vamos a tomar el codigo anterior y vamos a modificar el main de la siguiente manera:
int main()
{
struct Animal perro = {0};
perro.edad = 8;
perro.peso = 25;
perro.sexo = "M";
printf("Edad: %i\nPeso: %i\nSexo: %s\n",
perro.edad,
perro.peso,
perro.sexo);
return 0;
}
Vamos a analizar las principales diferencias, la primera es que al crear nuestro objeto le pasamos un nuevo valor, esto genera un objeto pero vacio, observen como por medio del nombre del objeto y el nombre del elemento junto al operador de asignacion (=) podemos asignarle un valor para cada uno de ellos, pero aqui hay trampa porque si lo compilamos de esta forma obtendremos este error:
error: assignment to expression with array type
Esto es debido a que no podemos asignar como un valor comun a uno de tipo array, sexo, para ello debemos modificar esta linea:
perro.sexo = "M";
De la siguiente manera:
perro.sexo[0] = 'M';
Recuerden que el tipo char es un array y no un caracter, en este caso como tiene el tamaño de una posicion, le pasamos este valor para indicarle que lo almacene en ese lugar, ahora con esto podemos compilarlo nuevamente y deberian obtener la misma salida que antes, con esto comentado volvamos al codigo y vamos a modificar el main de la siguiente manera:
int main()
{
struct Animal perro = {8, 25, "M"};
struct Animal perra = perro;
printf("Perro:\nEdad: %i\nPeso: %i\nSexo: %s\n",
perro.edad,
perro.peso,
perro.sexo);
printf("Perra:\nEdad: %i\nPeso: %i\nSexo: %s\n",
perra.edad,
perra.peso,
perra.sexo);
return 0;
}
Por un tema de practicidad volvimos a iniciar al primer objeto como lo hicimos la primera vez, despues definimos otro objeto del mismo struct pero esta vez le pasamos el objeto anterior para que lo copie, esto permite que la misma informacion sea transferida de uno al otro, lo siguiente sera mostrar los datos de ambos objetos de la misma forma pero en el segundo caso cambiamos la referencia y ahora le pasamos el nuevo objeto, con todo esto comentado compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo05
Perro:
Edad: 8
Peso: 25
Sexo: M
Perra:
Edad: 8
Peso: 25
Sexo: M
tinchicus@dbn001vrt:~/lenguajes/C$
Observen como mostramos ambos objetos y ambos tienen los mismos valores pero esto no es correcto, por lo tanto debemos modificar el main nuevamente de la siguiente manera:
int main()
{
struct Animal perro = {8, 25, "M"};
struct Animal perra = perro;
perra.edad = 5;
perra.sexo[0] = 'H';
printf("Perro:\nEdad: %i\nPeso: %i\nSexo: %s\n",
perro.edad,
perro.peso,
perro.sexo);
printf("Perra:\nEdad: %i\nPeso: %i\nSexo: %s\n",
perra.edad,
perra.peso,
perra.sexo);
return 0;
}
Observen que es lo mismo pero en este caso volvimos a aplicar lo que vimos anteriormente para asignar nuevos datos a los elementos de un objeto, en este caso modificamos la edad y el sexo para que sea mas acorde al nuevo objeto pero mantendremos el valor del peso, compilemos y veamos la nueva salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo05
Perro:
Edad: 8
Peso: 25
Sexo: M
Perra:
Edad: 5
Peso: 25
Sexo: H
tinchicus@dbn001vrt:~/lenguajes/C$
Esto que hicimos es practico para cuando tenemos objetos que comparten mismos valores para algunos elementos y solamente debemos modificar algunos para diferenciarlos, esto es lo mas basico sobre struct o estructuras, mas adelante cuando nos centremos mas en el OOP, Programacion Orientada a Objetos, veremos algunos temas como son las funciones y herencia.
En resumen, hoy hemos visto a struct, que es, para que sirve, como nos beneficia, un ejemplo para ver algunas nociones basicas y lo que proximamente veremos en otro post, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
