Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o tipo struct
  2. Entender o tipo enum
  3. Entender o tipo union

Os tipos de dados struct, enum e union são tipos de dados "mais complexos" que são compostos de outros tipos de dados. Possuem a sintaxe semelhante porém cada tipo possue suas próprias peculiaridades na utilização.

As operações básicas e uso desses tipos de dados podem ser vistos em C Básico: Struct, C Básico: Enum e C Básico: Union.

O tipo struct é um tipo de dado complexo que é composto de um ou mais membros de tipos de dados diferentes. Seu tamanho é variável devido ao fato de possuir membros com diferentes tipos.

O tipo de dado struct é principalmente utilizado para criar tipos de dados mais complexos e estrutura de dados.

Exemplo
struct nome_struct
{
  tipo_dado membro1;
  tipo_dado membro2;
  tipo_dado membroN;
}

O corpo de uma struct é delimitado por { e } e seus membros são separados por (;) e podem ser iniciados ou não. Os tipos do dados básicos, vetores, matrizes e ponteiros também podem ser utilizados.

O acesso aos membros de um struct é feita utilizando o operador (.) seguido do nome do membro, como pode ver visto na sintaxe abaixo:

Exemplo
variavel_struct.nome_membro;

O tipo enum é utilizado para definir uma enumeração em que cada membro possui um nome e um valor inteiro associado. Os membros são separado por (,), devem estar delimitados por { e } e possui o tipo inteiro.

Sintaxe
enum nome_enum
{
  nome_membro1,
  nome_membro2,
  nome_membroN;
}

Implicitamente, cada membro acima possui um valor associado. Por padrão, o primeiro membro está associado ao valor 0, o segundo membro, 1 e assim sucessivamente. Essas valores implícitos podem ser alterados de manualmente na declaração.

Caso um elemento tenha um valor atribuído em tempo de declaração, os elementos seguintes serão incrementados em 1.

Exemplo
enum nome_enum
{
  nome_membro1 = 10,
  nome_membro2, //11
  nome_membro3, //12
  nome_membroN; //
}

O acesso aos membros de um enum é feita utilizando o operadore (.) seguido do nome do do membro como pode ver visto na sintaxe abaixo:

Exemplo
variavel_enum.nome_membro;

O tipo union é um tipo de dado complexo que permite que um mesmo local de memória seja compartilhado armazenando diferentes tipos de dados.

Seus membros devem ser declarados entre { e } e separados por (;). A declaração de seus membros segue as mesmas regras para declaração de variáveis. Seu tamanho depende dos tipos de dados utilizados em sua composição.

O tipo de dados union é principalmente utilizado para economizar memória.

Sintaxe
union nome_union
{
  tipo_dado membro1;
  tipo_dado membro2;
  tipo_dado membroN;
}

O acesso aos membros de uma union é feita utilizando o operadore (.) seguido do nome do do membro como pode ver visto na sintaxe abaixo:

Exemplo
variavel_enum.nome_membro

Como um union agrupa vários tipos de dados em apenas um local de memória, é necessário trabalhar com um membro de union por vez, ou seja, a cada atribuição de valor a um determinado membro, a utilização do mesmo deve ser feito logo em seguida.

Exemplo
variavel_union.nome_membro1 = valor1 //valor descartado
variavel_union.nome_membro2 = valor2 //valor válido para utilização

Caso seja feita a atribuição de valores para todos os membros de uma union de forma sequencial, apenas o último valor atribuído será válido. Caso outro membro seja acessado, dados inválidos serão gerados.

  1. 04/10/2024 - revisão 2 - Ajustes gramaticais pontuais;
  2. 27/09/2023 - revisão 1 - Correção em link/referências, erros gramaticais e outros
  3. 19/05/2023 - versão inicial