La estructura es un tipo de datos similar a la matriz utilizada en la programación C, pero la única diferencia es que una matriz contiene los valores del mismo tipo de datos, mientras que la estructura contiene los valores sobre la base de los tipos de datos definidos por el usuario. Las matrices ocuparon algunos espacios en la memoria del sistema que puede ser dinámico o estático. La función malloc () se usa para la declaración de la memoria dinámica.
Se puede declarar una matriz de una estructura utilizando la memoria estática o la memoria dinámica, en este artículo, discutiremos la matriz de estructuras utilizando la función MALLOC ().
Cómo crear una variedad de estructuras con la función MALLOC en C
Las estructuras en la programación C se usan de manera similar a las clases. El tiempo de ejecución de las estructuras es relativamente más rápido que las clases. Para comprender la estructura, considere el ejemplo:
1 2 3 4 5 6 7 | Empleados de estructura int emp_id; char emp_name; ; |
Tenemos una estructura de "empleados"Que tiene dos miembros más; emp_int y emp_char. Podemos formar una matriz utilizando los empleados de Struct como:
1 | Struct Employee EmployeeData [4]; |
Hemos declarado una matriz "Data de empleados"Usando la estructura"empleados"Y tiene 4 ubicaciones para almacenar los valores. Si queremos acceder a los segundos elementos de la matriz de estructura que utilizaremos, EmployseData [1], y de manera similar si queremos acceder a los miembros de los elementos que usaremos, EmployseData [1].emp_id.
Pero aquí también podemos usar la función malloc () para usar la asignación de memoria dinámica. La ventaja de la memoria dinámica es que utiliza el espacio durante la ejecución del programa de acuerdo con el requisito. Para esto, usamos la función MALLOC (), que envía la solicitud de asignar un bloque de memoria al segmento de almacenamiento de la memoria que almacena los datos al azar. Si la memoria del montón no puede entretener la solicitud de malloc () debido al espacio insuficiente, devuelve el nulo de lo contrario asigna el bloque solicitado a la función MALLOC () para la ejecución del programa.
Ahora, si queremos usar la función malloc () para la declaración de la matriz de estructura, el programa será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #incluir #incluir int main (int argc, char ** argv) estructura typedef char* emp_name; int emp_id; Empleados; int num = 2, i; Empleados * EmploysesData = Malloc (num * sizeof * EmploysesData); para (i = 0; i < num; i++) EmployeeData [i].emp_name = (char*) malloc (sizeof (char*)); printf ("Ingrese el nombre del empleado:"); scanf ("%s", empleadodata [i].emp_name); printf ("Ingrese la identificación del empleado:"); scanf ("%d", y empleados data [i].emp_id); printf ("Por favor ingrese todos los nombres del máximo 8 caracteres \ n"); para (i = 0; i < num; i++) printf ("Nombre del empleado: %s, ID de empleados: %d \ n", EmployseData [i].Emp_Name, EmployseData [i].emp_id); GRATUITO (EmployeeData); return (0); |
Abriremos un archivo de texto, MyFile1, con la ayuda de Nano Editor y pegaremos el script anterior:
1 | $ nano myfile1.C |
Use el compilador GCC para compilar el archivo anterior:
1 | $ GCC myFile1.c -o myFile1 |
Una vez que el archivo se compila correctamente, ejecute el programa usando el comando:
1 | ps ./myFile1 |
La explicación del código anterior es:
Nota: Tenemos que usar el "estructura typedef"Al declarar la estructura, al usar esto no tenemos que usar la palabra clave"estructura" repetidamente.
Otra cosa a tener en cuenta es que puede hacer que el búfer se desborde porque hemos usado el "charla"Dentro del argumento de Malloc para declarar el tamaño del nombre variable. Esto hace que el EMP_NAME se limite a 8 bytes para una arquitectura de 64 bits y 4 bytes para arquitecturas de 32 bits. Este desbordamiento del búfer no ocurre todo el tiempo (la mayoría de las veces es administrado automáticamente por el compilador en tiempo de ejecución), por lo tanto, hemos pedido al usuario que ingrese 8 caracteres máximo para el nombre del empleado solo para estar en el lado seguro.
Si no desea poner un límite a la cantidad de caracteres para el nombre del empleado, simplemente puede tomar la entrada primero para el nombre del empleado dentro del bucle for dentro de una nueva variable y luego pasar ese tamaño de variable en la función Malloc.
Conclusión
El tipo de datos de estructura en la programación C proporciona un mejor rendimiento cuando tenemos que lidiar con pequeños grupos de los mismos valores. En este artículo, hemos discutido la creación de estructuras con matrices utilizando la función de memoria dinámica que es la función malloc (). La función malloc () usa solo ese bloque de memoria que se requiere.