Inicializando Structs
Parte da seção Logic & Flow do Journey de C da Coddy — lição 42 de 63.
Embora você possa criar variáveis struct e depois atribuir valores aos seus membros individualmente, C fornece uma maneira mais conveniente de definir valores iniciais. Você pode inicializar uma variável struct no momento da declaração usando uma lista de inicialização envolta em chaves.
A sintaxe para a inicialização de struct é:
struct StructureName variableName = {value1, value2, ...};Usando nosso exemplo de struct Point, você pode declará-la e inicializá-la em uma única linha limpa:
struct Point p1 = {10, 20};Isso cria uma variável Point chamada p1 com x definido como 10 e y definido como 20. Os valores na lista de inicialização são atribuídos aos membros da struct na ordem em que foram declarados na definição da struct.
Esta abordagem de inicialização não é apenas mais concisa do que atribuições separadas, mas também garante que sua struct comece com valores significativos em vez de dados de lixo aleatórios. É particularmente útil quando você conhece os valores iniciais em tempo de compilação e deseja criar variáveis de struct prontas para uso de forma eficiente.
Desafio
FácilCrie um programa em C que demonstre a inicialização de structs usando listas de inicializadores. Seu programa deve:
- Definir uma
structchamadaEmployeecom os seguintes membros:- Um inteiro
idpara armazenar o ID do funcionário - Um array de caracteres
departmentcom tamanho 15 para armazenar o nome do departamento - Um inteiro
yearsOfServicepara armazenar os anos de serviço - Um float
salarypara armazenar o salário do funcionário
- Um inteiro
- Criar três variáveis
Employeeusando listas de inicializadores com os seguintes dados:emp1: ID 101, departamento "Engineering", 5 anos de serviço, salário 75000.50emp2: ID 102, departamento "Marketing", 3 anos de serviço, salário 65000.25emp3: ID 103, departamento "Sales", 8 anos de serviço, salário 80000.75
- Imprimir as informações de cada funcionário neste formato exato:
Employee 1:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 2:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 3:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]
- Calcular e imprimir o salário total de todos os três funcionários no formato:
Total Salary: [total] - Calcular e imprimir a média de anos de serviço no formato:
Average Years of Service: [average]
Este desafio testa sua compreensão da inicialização de structs usando listas de inicializadores, onde você declara e inicializa variáveis de struct em uma única linha. Os valores na lista de inicializadores devem ser fornecidos na mesma ordem em que os membros foram declarados na definição da struct.
Sua saída esperada deve ser:
Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33Folha de consulta
Você pode inicializar uma variável struct no momento da declaração usando uma lista de inicializadores entre chaves:
struct StructureName variableName = {value1, value2, ...};Exemplo com uma struct Point:
struct Point p1 = {10, 20};Os valores na lista de inicializadores são atribuídos aos membros da struct na ordem em que foram declarados na definição da struct. Essa abordagem é mais concisa do que atribuições separadas e garante que sua struct comece com valores significativos em vez de dados de lixo aleatórios.
Experimente você mesmo
#include <stdio.h>
// TODO: Defina a struct Employee aqui
int main() {
// TODO: Crie três variáveis Employee usando listas de inicialização
// TODO: Imprima as informações de cada funcionário
// TODO: Calcule e imprima o salário total e a média de anos de serviço
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 Logic & Flow
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 Contato