Tutorial de programación en C para Linux Parte 26 – Estructuras y funciones
En uno de nuestros anteriores tutoriales sobre la línea de comandos, abordamos el concepto de Estructuras. Utilizando ejemplos fáciles de entender, hablamos de cosas básicas como qué son las estructuras y por qué son necesarias. A partir de ahí, en este tutorial hablaremos de cómo se pueden utilizar conjuntamente las estructuras y las funciones.
Estructuras y funciones en el lenguaje de programación C
Antes de empezar, vamos a refrescar rápidamente cómo se declara una estructura. Aquí tienes un ejemplo:
struct emp_details {
int emp_code;
int emp_age;
};
Aquí, la palabra clave struct -que es obligatoria si defines una estructura en C- significa el comienzo de la declaración. Le sigue una etiqueta, o puedes decir el nombre de la estructura. Luego, dentro de los paréntesis, tienes dos variables enteras, que se agrupan como parte de esta estructura.
Para utilizar esta estructura, primero tienes que definir su instancia u objeto. Puedes hacerlo de la siguiente manera:
emp_details obj;
Y luego se puede acceder a los miembros de la estructura de la siguiente manera:
obj.emp_code
obj.emp_age
Ahora, pasando a las funciones, una función puede devolver estructuras, así como aceptar estructuras en forma de argumentos. He aquí un ejemplo:
#include <stdio.h>
struct emp_details {
int emp_code;
int emp_age;
};
struct emp_details fill(int code, int age)
{
struct emp_details obj;
obj.emp_code = code;
obj.emp_age = age;
return obj;
}
int main()
{
int x,y;
printf("Enter employee code: ");
scanf("%d", &x);
printf("\n Enter employee age: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj = fill(x,y);
printf("\n The employee code and age you entered are: %d and %d", new_obj.emp_code, new_obj.emp_age);
return 0;
}
Así que aquí, en este ejemplo, tenemos una función «rellenar» que acepta dos enteros, los trata como código y edad, rellena una estructura basándose en esta información, y devuelve la estructura por valor al que llama a la función.
Ahora bien, como he mencionado antes en una declaración anterior, las estructuras también pueden pasarse como argumentos de la función. A continuación se muestra un ejemplo, en el que la función ‘fill’ acepta una estructura ‘emp_details’ como argumento.
#include <stdio.h>
struct emp_details {
int emp_code;
int emp_age;
};
void fill(struct emp_details obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj.emp_code, obj.emp_age);
}
int main()
{
int x,y;
printf("Enter employee code: ");
scanf("%d", &x);
printf("\n Enter employee age: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;
fill(new_obj);
return 0;
}
Y aquí está la salida en mi caso:
Enter employee code: 36
Enter employee age: 29
The employee code and age you entered are: 36 and 29
Siguiendo, al igual que las variables normales, las matrices y demás, también puede haber punteros a estructuras. Aquí tienes un ejemplo:
struct emp_details *ptr;
Como siempre, los punteros son útiles en caso de que el tamaño de la estructura sea grande, y la envíes como argumento a una función. Idealmente, así es como puedes acceder a las variables de la estructura a través de objetos punteros:
(*ptr).emp_code
(*ptr).emp_age
Pero en aras de la simplicidad, C te permite omitir * y . y utilizar ‘->’ en su lugar. A continuación, un ejemplo:
ptr->emp_code
ptr->emp_age
He aquí un ejemplo que hace uso del puntero de estructura:
#include <stdio.h>
struct emp_details {
int emp_code;
int emp_age;
};
void fill(struct emp_details *obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj->emp_code, obj->emp_age);
}
int main()
{
int x,y;
printf("Enter employee code: ");
scanf("%d", &x);
printf("\n Enter employee age: ");
scanf("%d", &y);
struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;
fill(&new_obj);
return 0;
}
Aunque se trata del mismo ejemplo que utilizamos anteriormente, los cambios -ya que ahora utilizamos un puntero de estructura- están resaltados en negrita.
Conclusión
En este tutorial, hemos ampliado nuestros conocimientos sobre las estructuras al hablar de cómo se pueden utilizar conjuntamente las funciones y las estructuras. Te animamos a que pruebes los ejemplos que hemos utilizado aquí en tu sistema local. En caso de cualquier duda o consulta, deja un comentario a continuación.