Declarando uma Struct
Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 39 de 63.
Agora que você entende o que é uma struct, é hora de aprender a criar seus próprios tipos de estrutura. Declarar uma struct em C segue uma sintaxe específica que define o modelo para o seu tipo de dado personalizado.
A sintaxe básica para declarar uma struct é:
struct StructureName {
datatype member1;
datatype member2;
// ... mais membros
};Veja como cada parte funciona: você começa com a palavra-chave struct, seguida por um nome para sua estrutura; depois, lista todas as variáveis membro entre chaves. Cada membro é declarado como uma variável comum, com seu tipo de dado e nome. Não se esqueça do ponto e vírgula após a chave de fechamento!
Por exemplo, para criar uma estrutura que represente um ponto no espaço 2D:
struct Point {
int x;
int y;
};Esta declaração cria um novo tipo de dado chamado struct Point que contém dois membros inteiros: x e y. Depois de declarado, esse tipo de estrutura pode ser usado em todo o seu programa para criar variáveis que armazenam informações de coordenadas de forma organizada.
Desafio
FácilCrie um programa em C que defina uma struct para representar um livro em um sistema de biblioteca. Seu programa deve:
- Definir uma
structchamadaBookque contenha os seguintes membros:- Um inteiro
idpara armazenar o número de identificação do livro - Um array de caracteres
titlecom tamanho 50 para armazenar o título do livro - Um inteiro
pagespara armazenar o número de páginas - Um float
pricepara armazenar o preço do livro
- Um inteiro
- Depois de definir a struct, imprima uma mensagem de confirmação:
Book struct defined successfully! - Imprima o tamanho da struct
Bookem bytes usandosizeof(struct Book)no formato:Size of Book struct: [size] bytes - Imprima o tamanho de cada membro individualmente, passando seu tipo para
sizeof(), por exemplo,sizeof(int)paraid,sizeof(char[50])paratitleesizeof(float)paraprice:Size of id: [size] bytesSize of title: [size] bytesSize of pages: [size] bytesSize of price: [size] bytes
Os membros totalizam 62 bytes, mas sizeof(struct Book) retorna 64: o compilador adiciona 2 bytes de preenchimento após title para que pages comece em um múltiplo de 4.
Este desafio testa sua compreensão da sintaxe de declaração de struct, incluindo o uso correto da palavra-chave struct, declarações de membros com tipos de dados apropriados e o ponto e vírgula após a chave de fechamento. Você também explorará como C aloca memória para membros de uma struct usando o operador sizeof().
Lembre-se de que os valores exatos de tamanho podem variar dependendo da arquitetura do seu sistema, mas a sintaxe de definição da struct deve estar correta para que o programa compile e execute com sucesso.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Defina sua struct Book aqui
// Imprima a mensagem de confirmação
printf("Book struct defined successfully!\n");
// TODO: Imprima o tamanho da struct Book e de seus membros
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres7Estruturas (structs)
O que é uma Struct?Declarando uma StructCriando Variáveis de StructAcessando Membros de uma StructInicializando StructsRecapitulação: Struct de Dados de Aluno2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online