Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Structs em C: O que são, para que servem e onde são usadas

Agora que você estudou vetores e ponteiros, e aplicou esses conhecimentos nas strings em C, você viu a utilidade dos vetores, que é manusear várias variáveis de uma vez só.
Imagina a trabalheira de, ao invés de usar strings, usar variáveis do tipo char isoladamente?
Não dá nem pra pensar, não é?

Mas vetores têm uma limitação: eles possuem um tipo definido.
Ou o vetor é de char, ou de inteiros, ou de floats etc. Ou seja, vetores não podem ser usados com tipos diferentes.

Vamos ensinar agora as structs, que servem para manusear uma quantidade maior de informações de uma maneira mais simples, eficiente e de tipos diferentes.

Para que serve uma struct em C 

Vamos supor que você foi contratado por uma grande empresa para criar um aplicativo de C que armazena todas as informações dos funcionários, um banco de dados.

Como você faria para armazenar as idades deles?
Vamos supor que tem 300 funcionários.
Ora, você já sabe que não vai declarar inteiro por inteiro, então vamos declarar um vetor de idades:
int idades[300];

E os nomes? Vamos separar 50 caracteres para cada pessoa.
Temos que ter 300 vetores (strings), cada um com 50 caracteres. Ficaria:
char nomes[300][50];

O mesmo para sua data de admissão, o salário de cada um, seus números de identificação, horários, cargos etc.

Mas como você faria saber as informações de um funcionário especificamente?
Poderíamos pegar cada posição para uma pessoa. Por exemplo, o funcionário Bruce Dickinson seria o de número 50.

Ou seja, para pegar o nome dele, vá para a posição 49 da matriz de strings.
Para saber o salário dele, vá na posição de número 49 do vetor de floats que representa os salários. Na posição 49 do vetor de inteiros podemos obter a idade deles e assim vai.
Isso tudo é possível, mas extremamente trabalhoso, confuso e nada organizado.

É para isso que existem as structs.

O que é uma struct em C

Struct, ou estrutura, é um bloco que armazenam diversas informações.
Poderíamos criar uma estrutura para cada funcionário, e dentro dessa estrutura tem variável do tipo int (para idade), do tipo string (para armazenar o nome), têm floats (que armazenam o salário de cada um), etc. E cada estrutura teria um nome, que seria algo relacionado com o funcionário.
Assim, sempre que quiséssemos um dado de um funcionário, bastaríamos ter acesso a estrutura dele, e todas as informações viriam juntas.

Essas estruturas, ou structs, podem ter quantos elementos você queira e dos tipos que você quiser. Você primeiro define a estrutura, seu nome e elementos.
Depois você escolhe quantos elementos daquela estrutura quer ter, e os declara com nomes diferentes.

Após isso, em vez de você manipular as milhares de variáveis dos mais diversos tipos que tenha criado, você trabalha só com a estrutura.
Assim não tem que se ‘estressar’ com cada detalhe da estrutura. Esses detalhes são definidos somente uma vez, na declaração da estrutura.

Onde as structs em C são usadas

Structs são muito usadas quando temos elementos em nossos programas que precisam e fazem uso de vários tipos de variáveis e características.
Usando struct, podemos trabalhar com vários tipos de informações de uma maneira mais fácil, rápida e organizada, uma vez que não temos que nos preocupar em declarar e decorar o nome de cada elemento da struct.

Por exemplo, vamos supor que você foi contratado para criar um aplicativo de uma escola.
As structs servem para você organizar as informações de uma maneira mais otimizada.
Para isso, basta colocarmos as informações comuns na estrutura.

Quais seriam os elementos comuns que deveríamos colocar nessa estrutura?
Ora, vamos trabalhar com alunos, então temos que colocar elementos na struct que representem os alunos: nome, notas, mensalidade, se esta mensalidade foi paga ou não etc.
Assim, podemos cria ruma struct para cada aluno e, automaticamente, esse aluno terá as variáveis acima citadas.

Outro exemplo seria para tratar carros de uma montadora.
Podemos representar a estrutura de um carro colocando alguns tipos de variáveis, que vão representar as características dos carros.
Por exemplo, qual a potência do motor, ano de fabricação, quantas portas possui, seu preço etc.

Assim, cada carro vai ter os elementos dessa struct automaticamente.

No próximo artigo de nosso curso de C vamos aprender como declarar uma struct, e você terá uma noção maior da utilidade da estrutura e como usá-las.

11 comentários:

Anônimo disse...

Muito útil! Se depender de alguns profissionais dos cursos presenciais, morremos de fome! kkkkk

Anônimo disse...

Bruce Dickison hehheheh, muito bom.

Anônimo disse...

Muito bom, ótimo para ser mais claro, sem dúvida o Cprogressivo.net é o melhor site que já vi sobre programação em C, Parabéns pessoal, continuem assim. Com o conteúdo que vocês disponibilizam aqui no site fica bem mais fácil aprender a programar.

Anônimo disse...

ótimo site para iniciantes e intermediários, ta me ajudando muito no curso, com detalhes q os professores não deixam claro dentro de sala.

Anônimo disse...

Na programação orientada a objetos, qual a diferença entre uma Struct e uma classe?

Anônimo disse...

Mil vezes mais didático que a própria faculdade. Da pra se dizer que eu aprendo muito mais com o CPROGRESSIVO do que com meus professores "de verdade". De coração, me faltam palavras pra agradecer. PARABÉNS!

Anônimo disse...

o cprogressivo ensina melhor que meus professores da faculdade! Parabéns, estão me ajudando bastante.

Anônimo disse...

no caso dos funcionários eu teria que declarar 300 structs??

Anônimo disse...

Pelo que entendi sim.

paulorc disse...

Olá,

parabéns pela excelente didática dos artigos.

Entretanto, tenho uma dúvida com relação à expressão "Onde usar structs":

foi exemplificado casos de cadastro de alunos de uma escola, por exemplo, e o texto fala em criar n estruturas suficientes para acolher o total de alunos e seus atributos. Pois bem, os conteúdos de structs podem ser salvos em memória não volátil, como HDs, e depois recuperados?
Ou estamos falando de manter um cadastro dentro do código fonte, e cada vez que surgir um novo aluno, deveremos atualizar este fonte e recompilar o projeto?
Obrigado.

Maickoness disse...

Bruce Dickinson rsrsrsrssrsrsrs
Muito bom!!
O artigo foi muito bom, me ajudou a entender de forma mais "fácil". Parabéns!
Vlw