Array de Estructuras en C

Satishkumar Bharadwaj 12 octubre 2023
  1. Matriz de struct en C
  2. Crear un array de struct usando la función malloc() en C
Array de Estructuras en C

Este tutorial introduce cómo crear un array de estructuras en C. Es la colección de variables de estructura múltiple donde cada variable contiene información sobre diferentes entidades.

Matriz de struct en C

Un array es una colección secuencial del mismo tipo de datos, y una estructura es un tipo de datos definido por el usuario. La declaración de un array de estructuras es la misma que la de un array de los tipos de datos primitivos, pero utiliza la estructura tiene el tipo de datos de sus elementos.

Considere un ejemplo de una estructura llamada Studeng como se muestra a continuación:

struct Student {
  int rollNumber;
  char studentName[10];
  float percentage;
};

Podemos declarar un array de estructuras como se indica a continuación.

struct Student studentRecord[5];

Aquí, el studentRecord es un array de 5 elementos donde cada elemento es de tipo struct Student. Los elementos individuales se acceden usando la notación de índice ([]), y los miembros se acceden usando el punto . operador.

El studentRecord[0] apunta al elemento del array, y el studentRecord[1] apunta al elemento del array.

De manera similar,

  • El studentRecord[0].rollNumber se refiere al miembro rollNumber del 0º elemento del array.
  • El studentRecord[0].studentName se refiere al studentName del 0º elemento del array.
  • El studentRecord[0].percentage se refiere al miembro del percentage del 0º elemento del array.

El programa completo para declarar un array de la struct en C es el siguiente.

#include <stdio.h>
#include <string.h>

struct Student {
  int rollNumber;
  char studentName[10];
  float percentage;
};

int main(void) {
  int counter;
  struct Student studentRecord[5];

  printf("Enter Records of 5 students");

  for (counter = 0; counter < 5; counter++) {
    printf("\nEnter Roll Number:");
    scanf("%d", &studentRecord[counter].rollNumber);
    printf("\nEnter Name:");
    scanf("%s", &studentRecord[counter].studentName);
    printf("\nEnter percentage:");
    scanf("%f", &studentRecord[counter].percentage);
  }

  printf("\nStudent Information List:");

  for (counter = 0; counter < 5; counter++) {
    printf("\nRoll Number:%d\t Name:%s\t Percentage :%f\n",
           studentRecord[counter].rollNumber,
           studentRecord[counter].studentName,
           studentRecord[counter].percentage);
  }
  return 0;
}

Resultado:

Enter Record of 5 students
Enter Roll number:1
Enter Name: John
Enter percentage: 78

Enter Roll number:2
Enter Name: Nick
Enter percentage: 84

Enter Roll number:3
Enter Name: Jenny
Enter percentage: 56
  
Enter Roll number:4
Enter Name: Jack
Enter percentage: 77
   
Enter Roll number:5
Enter Name: Peter
Enter percentage: 76
    
   Student Information List
   Roll Number: 1		Name: John		percentage:78.000000
   Roll Number: 2		Name: Nick		percentage:84.000000
   Roll Number: 3		Name: Jenny		percentage:56.000000
   Roll Number: 4		Name: Jack		percentage:77.000000
   Roll Number: 5		Name: Peter		percentage:76.000000
       

Crear un array de struct usando la función malloc() en C

Hay otra forma de hacer un array de struct en C. La memoria puede ser asignada usando la función malloc() para un array de estructuras. Esto se llama asignación de memoria dinámica.

La función malloc() (asignación de memoria) se utiliza para asignar dinámicamente un solo bloque de memoria con el tamaño especificado. Esta función devuelve un puntero de tipo void.

El puntero devuelto puede ser lanzado en un puntero de cualquier forma. Inicializa cada bloque con el valor de basura por defecto.

La sintaxis de la función malloc() es la siguiente:

ptrVariable = (cast - type*)malloc(byte - size)

El programa completo para crear un array de estructuras dinámicas es como sigue.

#include <stdio.h>
int main(int argc, char** argv) {
  typedef struct {
    char* firstName;
    char* lastName;
    int rollNumber;

  } STUDENT;

  int numStudents = 2;
  int x;
  STUDENT* students = malloc(numStudents * sizeof *students);

  for (x = 0; x < numStudents; x++) {
    students[x].firstName = (char*)malloc(sizeof(char*));

    printf("Enter first name :");
    scanf("%s", students[x].firstName);
    students[x].lastName = (char*)malloc(sizeof(char*));
    printf("Enter last name :");
    scanf("%s", students[x].lastName);
    printf("Enter roll number  :");
    scanf("%d", &students[x].rollNumber);
  }

  for (x = 0; x < numStudents; x++)
    printf("First Name: %s, Last Name: %s, Roll number: %d\n",
           students[x].firstName, students[x].lastName, students[x].rollNumber);

  return (0);
}

Resultado:

Enter first name:John
Enter last name: Williams
Enter roll number:1

Enter first name:Jenny
Enter last name: Thomas
Enter roll number:2
    
First Name: John	Last Name: Williams		Roll Number:1
First Name: Jenny	Last Name: Thomas		Roll Number:2

Artículo relacionado - C Array

Artículo relacionado - C Struct