Uma das principais vantagens dos registros é a possibilidade de representar entidades complexas de forma organizada. Na prática, raramente trabalhamos com apenas um registro. Em muitos programas, precisamos armazenar dezenas, centenas ou até milhares de registros do mesmo tipo.

Além disso, também é comum que um registro contenha outro registro como parte de sua estrutura, permitindo criar modelos de dados mais próximos da realidade.

Nesta seção estudaremos essas duas técnicas.

Vetores de Registros

Da mesma forma que podemos criar vetores de tipos primitivos, também podemos criar vetores de registros.

Considere o seguinte tipo:

typedef struct {
    char nome[100];
    int matricula;
    float media;
} Aluno;

Podemos criar um vetor para armazenar uma turma inteira:

Aluno turma[40];

Nesse caso, cada posição do vetor armazena um registro completo do tipo Aluno.

Visualmente:

turma
├── turma[0]
├── turma[1]
├── turma[2]
├── ...
└── turma[39]

Cada elemento possui seus próprios campos:

turma[0]
├── nome
├── matricula
└── media

Acessando Elementos do Vetor

O acesso ocorre combinando o índice do vetor com o operador ponto (.):

strcpy(turma[0].nome, "Ana Silva");
turma[0].matricula = 2025001;
turma[0].media = 8.7;

Da mesma forma, podemos acessar qualquer outro elemento:

strcpy(turma[1].nome, "Carlos Souza");
turma[1].matricula = 2025002;
turma[1].media = 7.9;

Percorrendo um Vetor de Registros