aula 172

Como passar uma struct como parâmetro para um procedimento?

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;
}

Deixe um comentário

dezesseis − 1 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.