¿Qué son?
Es una lista de variables que se encuentran bajo un mismo nombre en el mismo bloque de memoria. Esto nos permite trabajar de alguna manera con objetos de nuestro entorno asignándole las propiedades que deseamos trabajar. Por ejemplo, supongamos que queremos programar algo relacionado con personas y deseamos manipular su edad, estatura y nombre. Probablemente si no supiéramos usar structs declararíamos una variable para cada una de esas cualidades que deseamos trabajar. Sin embargo, si quisiéramos trabajar con N personas, entonces deberíamos declarar N variables por cada una, o en dado caso, un arreglo para cada variable distinta, lo cual nos podría perjudicar al tener un desorden total y un control de indices para cada arreglo si se diera el caso.
En este caso lo mejor es trabajar con un struct que guarde estas tres variables, y crear un arreglo de este mismo para las N personas que manipularemos.
Declaración
Siguiendo con el ejemplo del apartado anterior, declararemos un struct llamado Persona, ya que es lo que deseamos programar:
struct Persona
{
int edad;
float estatura;
char nombre[20];
};
De esta forma si quisiéramos trabajar con una persona en nuestro programa, claramente se puede observar las variables que necesitamos para manipular dicha variable. Sin embargo, esta es solo la declaración, si quisiéramos utilizar el contenido de esta estructura, deberíamos primeramente declarar una variable para esta misma de la siguiente manera:
int main()
{
struct Persona variablePersona;
return 0;
}
Como se puede observar, puede llegar a ser un tanto complicado debido a que se requieren dos palabras para declarar una sola variable y ciertamente podríamos olvidarnos de poner alguna, como la palabra reservada struct. Para ahorrarnos palabras existe la posibilidad de declarar de una manera diferente el struct y se hace de la siguiente manera:
typedef struct Persona
{
int edad;
float estatura;
char nombre[20];
}Persona;
De esta manera estamos re-definiendo el nombre de la estructura a Persona solamente utilizando la palabra reservada typedef. Rapidamente typedef hace lo siguiente:
typedef [tipo de dato que queremos renombrar] NuevoNombre;
En nuestro caso, struct Persona es un tipo de dato, así como lo son: int, float, double, etc... Por lo que ahora para declarar una variable tendríamos que hacer lo siguiente:
int main()
{
Persona variablePersona;
return 0;
}
Dejando mas legible que estamos tratando nuestro tipo de dato Persona el cual realmente es un struct Persona. Esto con la practica se irá haciendo mas fácil, pero debes tener en cuenta que si no usas el typedef en la declaración del struct, cada vez que quieras crear una variable de este tipo, deberás escribir struct <Nombre_del_struct> <Nombre_variable>;, hasta en los prototipos de las funciones que pudieras utilizar.
¿Cómo utilizo mi nueva variable?
Como toda variable en C, en un struct los campos vienen con "basura" y deben ser inicializados si no se van a tratar como entrada de la linea de comandos o un archivo.
Para acceder a cada uno de los campos de nuestra variable se debe colocar un punto después del nombre y seguido el campo que deseamos obtener:
int main()
{
Persona variablePersona;
variablePersona.edad = 10;
variablePersona.estatura = 1.74f;
variablePersona.nombre = "Pepe";
return 0;
}
En el momento que colocamos el punto y el nombre del campo al que deseamos acceder, estamos utilizando directamente esa variable como si fuera cualquier otra del tipo declarado dentro del struct.
Si quisiéramos leer o escribir en la variable del tipo Persona se haría lo siguiente:
En C:
int main()
{
Persona variablePersona;
//Escritura de cada variable usando scanf
printf("Introduce la edad: ");
scanf("%d", &variablePersona.edad);
printf("Introduce la estatura en metros: ");
scanf("%f", &variablePersona.estatura);
printf("Introduce el nombre: ");
scanf("%s", variablePersona.nombre);
//Lectura de cada variable usando printf
printf("La edad de %s es: %d \n",variablePersona.nombre,variablePersona.edad);
printf("La estatura de %s es: %f metros \n",variablePersona.nombre,variablePersona.estatura);
return 0;
}
En C++:
int main()
{
Persona variablePersona;
//Escritura de cada variable usando cin
cout << "Introduce la edad: ";
cin >> variablePersona.edad;
cout <<"Introduce la estatura en metros: ";
cin >> variablePersona.estatura;
cout << "Introduce el nombre: ";
cin.getline(variablePersona.nombre, 20, "\n");
//Lectura de cada variable usando cout
cout << "La edad de "<<variablePersona.nombre<<"es: "<<variablePersona.edad << endl;
cout << "La estatura de "<<variablePersona.nombre<<"es: "<<variablePersona.estatura << endl;
return 0;
}
No hay comentarios:
Publicar un comentario