Struct – Registros em Linguagem C

bubble sort

Fala Galera!!!! No último artigo da série ESTRUTURAS DE DADOS eu apresentei a vocês o conceito de REGISTROS, utilizando Pascal. Hoje mostrarei a vocês como implementar esse conceito de REGISTROS na linguagem C. Nos próximos artigos mostrarei outras formas de se usar Structs, por isso é importante vocês seguirem a ordem de publicação Se desejarem, no meu SLIDESHARE tem vários slides da Linguagem C, Pascal, Java, entre outros materiais que preparei para as minhas aulas. Fiquem à vontade para utilizá-los e não esqueçam de os referenciar se usar em algum trabalho.

Struct

Em Linguagem C Registros são chamados de Estruturas e a palavra-chave é Struct. Em termos gerais o comportamento não é diferente dos Registros em Pascal, afinal, Registros é um conceito de programação que é implementado pelos compiladores de cada linguagem de programação. Nas próximas subseções, o recurso de Struct será explicado de forma bem detalhada, leia com bastante atenção ok?!

Definindo uma Estrutura

Uma estrutura pode ser definida de formas diferentes. No corpo da estrutura encontram-se os membros, ou seja, as variáveis de diversos tipos que comporão esse tipo de dado heterogêneo definido pelo usuário. Depois de definida uma estrutura, uma (ou mais) variável do tipo estrutura deve ser definida, para permitir a manipulação dos membros da estrutura.

Exemplo 1

Neste exemplo o nome, ou Etiqueta (TAG), da estrutura é colocado logo em seguida da palavra-chave Struct. A Etiqueta da estrutura é nomeada como ALUNO. Ao final da estrutura, são declaradas várias variáveis do tipo da estrutura, isto é, aluno_especial, aluno_regular e aluno_ouvinte, são variáveis do tipo aluno.

Dessa forma a sintaxe é a seguinte:

Exemplo 2

Neste exemplo o nome da estrutura é colocado ao final, logo em seguida ao fechamento da estrutura, isto é, a Etiqueta da estrutura é nomeada depois. Após a declaração da estrutura, são definidas as várias variáveis do tipo da estrutura.

Dessa forma a sintaxe fica:

Exemplo 3

Neste exemplo, usei a palavra-chave Typedef para definir uma estrutura, antes da palavra-chave Struct. O nome da estrutura é colocado ao final, logo em seguida ao fechamento da estrutura. Após a declaração são definidas várias variáveis do tipo da estrutura.

Assim a sintaxe fica da seguinte forma:

Acessando os membros da Estrutura

Para acessar os membros da estrutura, quando ela é diretamente referenciada, devemos utilizar o Ponto, que também é chamado de operador de seleção direta, veja:

Atribuindo valores aos membros da Estrutura

Você pode atribuir valores aos membros das estruturas diretamente, e em qualquer parte do programa, conforme a seguir:

Para atribuir um valor a uma string é necessário utilizar a função Strcpy (CPY = copiar; STR = string). A função copiará o que está dentro das aspas duplas para o membro STRING da estrutura.

Inicializando a Estrutura

Como já foi mencionado em artigos anteriores, é sempre importante inicializar as variáveis que serão utilizadas em nosso programa, com as estruturas não é diferente. Você pode fazer isso de duas formas: ou atribui valores padrão diretamente aos membros da estrutura, ou então cria uma função, que será chamada no programa principal, para fazer isso por você.

Imprimindo os membros da Estrutura

Você pode imprimir os membros da estrutura em qualquer parte do programa que desejar. Se for preciso imprimir todos os membros da Estrutura de uma única vez, então é melhor criar uma função para isto.

Note que a função de impressão é do tipo Void mas tem um argumento, isto é, é definida uma variável do tipo da estrutura, significando que, ao chamar a função, você deverá passar como parâmetro a estrutura que está trabalhando. A chamada fica da seguinte forma:

Obtendo Valores do Teclado

Para obter dados do teclado devemos utilizar o Scanf, tomando cuidado quando formos usar strings. Podemos obter dados do teclado em qualquer parte do programa, assim como também podemos definir uma função para realizar este trabalho.

Observe que na função cadastrar e imprimir exemplificados aqui é passado como parâmetro (por valor) a variável do tipo estrutura. Em algumas ocasiões você precisará fazer desta forma, em outras, talvez você não tenha que passar a estrutura como parâmetro.

Exemplo 1

Neste exemplo demonstro como definir e utilizar uma Struct diretamente no programa principal.

Exemplo 2

Neste exemplo demonstro como definir e utilizar uma Struct aplicando o conceito de modularização, isto é, usando funções para poder reutilizar trechos de códigos em outras partes do programa.

Conclusão

Dessa forma, termino aqui a primeira parte da explicação sobre Structs. Os exemplos que apresentei aqui utilizaram Structs de forma simples. Nos próximos artigos demonstrarei outras formas de se utilizar as Structs. Fiquem atentos.

Exercícios

  1. Desenvolva um programa em C para vendas de passagens de ônibus. Defina uma STRUCT, crie o menu de opções e todas as funções necessárias para manipular esta STRUCT.

Outros artigos da série

<< Introdução a RegistrosAlgoritmos de Ordenação: Bubble Sort >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Struct - Registros em Linguagem C
Comentários:
Notificações
Notificar
guest
21 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Jonatas S. Andrade
Jonatas S. Andrade
27/03/2020 12:38

De longe a melhor explicação sobre struct em C que já encontrei, incluindo as fontes em inglês.

Primeira visita ao blog, já foi favoritado. Obrigado pelo material de qualidade!

Jonas Barbosa
Jonas Barbosa
26/01/2020 18:34

Cara professora Gatto, Gostaria de criar um índice remissivo, no caso, da Ethica de Baruch de Spinoza, material de estudo do meu segundo ano de Teologia. Preciso construir um índice remissivo, do arquivo que listo à seguir: ARQUIVO ORIGINAL: 0001 PARS PRIMA 0002 DE DEO 0003 DEFINITIONES 0004 I. Per causam sui intelligo id cujus essentia involvit existentiam sive id cujus natura non potest concipi nisi existens. 0005 II. Ea res dicitur in suo genere finita quæ alia ejusdem naturæ terminari potest. Exempli gratia corpus dicitur finitum quia aliud semper majus concipimus. Sic cogitatio alia cogitatione terminatur. At corpus non… Leia mais »

Victor Hugo
Victor Hugo
16/12/2019 21:32

Formidável sua explicação sobre Struct. Obrigado.

alex
alex
03/11/2019 12:33

Nao consigo fazer esse exercicio.struct”.Com base nisso, suponha que é necessário armazenar informações relacionadas à veículos, totalizando, no máximo, 10 veículos. Para cada veículo, deverão ser fornecidos os seguintes dados:- marca do veículo- modelo - ano de fabricação- placa (formato XXX-YYYY; onde X denota as letras e Y denota os números da placa).O sistema deverá oferecer, ao usuário, as seguintes funcionalidades:- Listar os veículos cadastrados;- Inserir um novo veículo;- Listar os veículos filtrando-se por ano de fabricação;- Listar os veículos com o ano de fabricação acima de um certo valor especificado pelo usuário. - Listar os veículos filtrando-se pelo modelo.O… Leia mais »

Rafael
Rafael
25/09/2019 14:53

Como dizem na minha terra: é de "encher os olhos". Parabéns!!!

Lucian
Lucian
18/06/2019 20:34

Excelente conteudo

Julio Cesar
Julio Cesar
14/05/2019 01:10

Quantas variaveis cabe dentro da struct?

Manoel Vitor
Manoel Vitor
01/05/2019 22:47

Parabens pelo blog doutora!

Frank William
Frank William
30/04/2019 16:20

Muito legal, show... Gostei, mas na função cadastrar(), acredito que não deve usar o scanf por que se alguém manda um nome composto tipo o meu Frank William, ja buga... ai se trocar pelo fgets fica show.
Tipo:

void cadastrar()
{
printf(" Digite o código do aluno especial: ");
scanf("%d", &aluno_especial.codigo);

printf(" Digite o nome do aluno especial: ");
fflush(stdin);
fgets(aluno_especial.nome, 200, stdin);

printf(" Digite a nota do aluno especial: ");
scanf("%f", &aluno_especial.nota);
}

andre
andre
31/10/2018 12:09

faltou o #include

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link