Dando continuidade ao estudo de novos tipos de dados com typedef struct em nosso curso de programação C, vamos aprender nesta aula como passar uma struct como parâmetro para um procedimento.
Antes de continuar, pergunte e você mesmo se você realmente entendeu como passar uma variável primitiva para uma função ou procedimento. Caso tenha alguma dúvida, volte, revise estas aulas e faça mais exercícios.
Agora, se você já entendeu esta parte, a boa notícia é que não muda nada. Passar uma variável struct para um procedimento é exatamente igual a passar uma variável do tipo int ou char.
Ao criar o procedimento, precisamos informar dentro do par de parênteses o tipo e o nome da variável a ser recebida. Veja o exemplo a seguir para imprimir os dados de uma variável do tipo Pessoa.
void imprimirPessoa(Pessoa p){ printf("\tNome: %s", p.nome); printf("\tIdade: %d\n", p.idade); printf("\tSexo: %c\n", p.sexo); printf("\tData de nas.: %d/%d/%d\n", p.dataNas.dia, p.dataNas.mes, p.dataNas.ano); }
Da mesma forma, ao chamar o procedimento imprimir, basta enviar uma variável do tipo Pessoa, assim:
// usando o procedimento pessoa imprimirPessoa(pessoa);
Código completo em C para imprimir as informações de uma Pessoa
#include <stdio.h> #include <stdlib.h> #include <time.h> /* Aula 172: Como criar um procedimento que recebe uma struct como parâmetro Código escrito por Wagner Gaspar Abril de 2021 */ typedef struct{ int dia, mes, ano; }DataNas; typedef struct{ DataNas dataNas; int idade; char sexo; char nome[100]; }Pessoa; void imprimirPessoa(Pessoa p){ printf("\tNome: %s", p.nome); printf("\tIdade: %d\n", p.idade); printf("\tSexo: %c\n", p.sexo); printf("\tData de nas.: %d/%d/%d\n", p.dataNas.dia, p.dataNas.mes, p.dataNas.ano); } int main() { Pessoa pessoa; printf("Digite seu nome: "); fgets(pessoa.nome, 100, stdin); printf("Digite sua idade: "); scanf("%d", &pessoa.idade); scanf("%c"); printf("Digite f ou m para o sexo:"); scanf("%c", &pessoa.sexo); printf("Digite sua data de nascimento no formato dd mm aaaa:"); scanf("%d%d%d", &pessoa.dataNas.dia, &pessoa.dataNas.mes, &pessoa.dataNas.ano); imprimirPessoa(pessoa); return 0; }