Dominando Structs em C: Passagem, Retorno e Manipulação por Referência
Structs em C: Passagem, Retorno e Manipulação por Referência
Na programação em C, estruturas permitem agrupar dados relacionados em uma única entidade. Este guia aborda três operações essenciais com structs: passá-las para funções, retorná-las de funções e manipulá-las por referência. Cada seção inclui explicação concisa e exemplo funcional.
Passando structs para funções
Assim como tipos embutidos, variáveis struct podem ser passadas diretamente para uma função. Antes de começar, revise structs em C, funções em C e funções definidas pelo usuário.
O exemplo a seguir demonstra como passar uma struct aluno para uma função que imprime seu conteúdo.
#include <stdio.h> struct aluno { char nome[50]; int idade; }; // Protótipo da função void exibir(struct aluno s); int main() { struct aluno s1; printf("Digite o nome: "); scanf("%[^ ]%%*c", s1.nome); // lê até nova linha printf("Digite a idade: "); scanf("%d", &s1.idade); exibir(s1); // passa struct para função return 0; } void exibir(struct aluno s) { printf("\nExibindo informações\n"); printf("Nome: %s", s.nome); printf("\nIdade: %d", s.idade); } Saída
Digite o nome: Bond Digite a idade: 13 Exibindo informações Nome: Bond Idade: 13
Retornando uma struct de uma função
Funções podem retornar structs inteiras, permitindo separação limpa entre coleta e processamento de dados. O exemplo abaixo coleta informações do aluno dentro de uma função e as retorna para main.
#include <stdio.h> struct aluno { char nome[50]; int idade; }; // Protótipo da função struct aluno obterInformacao(); int main() { struct aluno s; s = obterInformacao(); printf("\nExibindo informações\n"); printf("Nome: %s", s.nome); printf("\nIdade: %d", s.idade); return 0; } struct aluno obterInformacao() { struct aluno s1; printf("Digite o nome: "); scanf("%[^ ]%%*c", s1.nome); printf("Digite a idade: "); scanf("%d", &s1.idade); return s1; } O tipo de retorno da função corresponde à struct que ela retorna, garantindo segurança de tipo e clareza.
Passando uma struct por referência
Quando você precisa que uma função modifique uma struct, passe seu endereço (um ponteiro). Isso é análogo a passar tipos embutidos por referência. O exemplo a seguir soma dois números complexos e armazena o resultado através de um ponteiro.
#include <stdio.h> typedef struct Complexo { float real; float imag; } complexo; void somarNumeros(complexo c1, complexo c2, complexo *resultado); int main() { complexo c1, c2, resultado; printf("Para o primeiro número,\n"); printf("Digite a parte real: "); scanf("%f", &c1.real); printf("Digite a parte imaginária: "); scanf("%f", &c1.imag); printf("Para o segundo número,\n"); printf("Digite a parte real: "); scanf("%f", &c2.real); printf("Digite a parte imaginária: "); scanf("%f", &c2.imag); somarNumeros(c1, c2, &resultado); printf("\nresultado.real = %.1f\n", resultado.real); printf("resultado.imag = %.1f", resultado.imag); return 0; } void somarNumeros(complexo c1, complexo c2, complexo *resultado) { resultado->real = c1.real + c2.real; resultado->imag = c1.imag + c2.imag; } Saída
Para o primeiro número, Digite a parte real: 1.1 Digite a parte imaginária: -2.4 Para o segundo número, Digite a parte real: 3.4 Digite a parte imaginária: -3.2 resultado.real = 4.5 resultado.imag = -5.6
Como resultado é passado por referência, qualquer alteração dentro de somarNumeros afeta imediatamente a variável em main.
Dominando essas técnicas, você pode escrever código C mais modular, legível e eficiente que aproveita todo o poder das estruturas.
Linguagem C
- Entendendo Structs em C#: Definição, Uso e Diferenças-Chave
- Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
- Dominando Structs em C: Definição, Variáveis, Acesso e Exemplos Avançados
- Dominando Structs e Ponteiros em C: Guia Prático
- Entendendo a Estrutura de Programas C: Guia para Iniciantes
- Entendendo Tipos de Dados em C: Guia Abrangente
- Entendendo Constantes e Literais em C: Tipos, Uso e Boas Práticas
- Dominando Funções em C: Estrutura, Declaração e Boas Práticas
- Dominando Sobrecarga em C++: Funções e Operadores Explicados
- Transformadores Elétricos Explicados: Função, Design e Aplicações Industriais