Introdução aos registros (Structs)

Ver Todos os Exercícios

Teoria

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

Para começar, imagine que você esteja desenvolvendo um programa para a administração da sua faculdade. Por se tratar de uma faculdade, esse programa deve ter como dados informações sobre todos os alunos matriculado como: nome, telefone, endereço etc. Como você faria para juntar todas essas informações relacionando-as a um único aluno?

Vamos imaginar que nós dois temos que desenvolver um programa para a parte administrativa da faculdade, mais especificamente para a gestão dos alunos. Esse programa deve ter os dados de todos os alunos que estão matriculados na faculdade, como: nome, telefone, endereço etc.

Dado que cada aluno deve ter o seu registro próprio, como nós podemos unir todas essas informações pessoais e armazená-las unicamente para cada aluno?

Parece coisa de outro mundo, né?

Nesse tópico nós iremos conversar um pouquinho sobre os registros (também conhecidos como structs), eles são muito úteis em casos como o descrito anteriormente. Então, sem perder tempo vamos entender de vez esse novo conceito de programação!

Struct

Eu não sei se você percebeu, mas as denominações struct e registro sempre andam juntas, pois as mesmas são análogas em programação. Entretanto, qual é o motivo dessa semelhança?

De forma bem direta ao ponto, isso acontece porque assim como nos registros, uma struct é composta por diversos campos.

Por exemplo, vamos relembrar o problema descrito na introdução e analisarmos como ele é resolvido na realidade.

Simples demais!

A faculdade possui diversos formulários preenchidos sobre cada aluno. Mas pensa comigo, um formulário nada mais é do que o registro de um aluno composto pelos campos nome, telefone, endereço etc.

Sentiu o brainstorm?

O mesmo acontece quando analisamos a linguagem C, onde uma struct é capaz de organizar uma estrutura com as informações pessoais de cada aluno (campos) em variáveis, para posteriormente ser utilizada de forma única com o objetivo de armazenar os dados de cada aluno.

Vamos dar uma olhada em um outro exemplo!

E se agora nós estivéssemos desenvolvendo um programa para uma empresa de entrega (a gente tem futuro como uma dupla programadora, hein!?) e tivéssemos que armazenar os seguintes dados de alguns usuários: rua, bairro, cidade, estado e número. O que faríamos para programar essa união de dados?

Basta criarmos uma struct chamada endereco com todos os campos necessários, dessa forma poderíamos armazenar unicamente diferentes endereços utilizando a mesma estrutura.

E como a gente faz isso? Uma dica, é só olhar aqui embaixo!

Criando uma struct

A criação de uma struct é bastante simples, utilizando como exemplo o mesmo registro endereco que criamos anteriormente, utilizaríamos o seguinte trecho de código para cria-lo:

Não se preocupe, vou te explicar direitinho o que está acontecendo.

Basicamente, nós acabamos de definir uma estrutura (struct) endereco com os seguintes campos: rua, bairro, cidade, estado e numero. Observe que a declaração dos campos de uma struct é feita exatamente da mesma forma que a declaração de variáveis, ou seja, necessitam de um tipo, nome, e, no caso das strings (vetores de caracteres), de um tamanho.

Para ficar ainda mais fácil, abaixo temos um exemplo geral de declaração de estruturas na linguagem C:

Mas até então nós só temos uma estrutura, como tornamos essa única estrutura capaz de armazenar o endereço de uma faculdade, por exemplo? Simples, basta realizarmos a sua declaração:

Com isso nós temos uma variável end_faculdade que armazena uma estrutura endereco e pode ser manipulada, nesse contexto, para armazenar e disponibilizar as informações de endereço sobre uma faculdade específica.

E se precisarmos utilizar diversas variáveis dessa estrutura?

Podemos utilizar o comando de redefinição de tipo typedef para criarmos um tipo referente a uma determinada estrutura. Nesse caso, a estrutura e n d e r e c o :

Agora somos capazes de criar inúmeras variáveis do tipo e n d _ f a c u l d a d e , que nada mais é do que um tipo ou “apelido” da estrutura e n d e r e c o .

Esse conceito pode parecer meio diferente, mas ele é muito importante e útil na programação. Então, não se esqueça de fazer os exercícios de fixação!

Te espero na página aqui do lado, parceiro(a).

Criando uma struct

Exercícios Resolvidos

Exercício Resolvido #1

O que é um registro (struct) e qual é a sua função em um programa da linguagem C?

Passo 1

Para entendermos melhor, imagine que eu fosse criar um programa que reunisse algumas de minhas informações.

Criando uma variável para cada informação, teríamos algo mais ou menos assim:

  • n o m e G u g a ;
  • i d a d e G u g a ;
  • t e l e f o n e G u g a .

E se eu agora quisesse reunir as informações do Marcelo, teríamos que criar mais três variáveis? E da Ana? Paulo? E por aí vai...

Um registro é uma estrutura em que eu posso adicionar campos, no caso anterior, eu teria apenas uma registro p e s s o a com os campos n o m e , i d a d e e t e l e f o n e que poderia ser usado tanto para mim quanto para qualquer outra pessoa sem a necessidade de mais declarações.

Resposta

Um registro é uma estrutura capaz de unir campos em comum e tem a função de servir como base de utilização sem a necessidade de declarações específicas para cada campo.

Exercício Resolvido #2

Observe a definição da estrutura d a t a :

Identifique e explique o motivo pelo qual o programa não compila, mencione a linha de código em que o erro ocorre.

Passo 1

O programa não compila, pois após o fechamento das chaves durante a definição da estrutura d a t a não existe o ponto e vírgula (linha 06).

Resposta

A ausência do ponto e vírgula faz com que o programa não identifique a finalização da definição da estrutura d a t a , como consequência disso não reconhece a função main.

Exercício Resolvido #3

Observe as seguintes declarações:

Qual é a função do comando presente na linha 13 na declaração da estrutura a u t o m o v e l ?

Passo 1

Analisando a estrutura a u t o m o v e l conseguimos concluir que um dos campos desse registro é uma variável v e n d e d o r do tipo p r o p r i e t a r i o , que é uma outra struct.

Passo 2

Sendo assim, podemos concluir que a estrutura a u t o m o v e l está vinculada a outra estrutura denominada p r o p r i e t a r i o . Dessa forma, podemos dentro de a u t o m o v e l acessar informações sobre o vendedor de um carro, por exemplo.

Resposta

A função de tornar uma struct campo de outra struct é criar um vínculo. Nesse caso, podemos acessar dados como: nome e C.P.F de um vendedor sem propriamente criar esses campos na struct a u t o m o v e l (não teria sentido), mas criando uma struct p r o p r i e t a r i o e fazendo dela um campo do registro a u t o m o v e l .