Anuncios

Bienvenidos sean a este post, hoy veremos las estructuras.

Anuncios

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;
};
Anuncios

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;
}
Anuncios

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"};
Anuncios

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$
Anuncios

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;
}
Anuncios

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
Anuncios

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";
Anuncios

De la siguiente manera:

perro.sexo[0] = 'M';
Anuncios

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;
}
Anuncios

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$
Anuncios

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;
}
Anuncios

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$
Anuncios

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.

Anuncios

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.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50