www.samueldiasneto.com: Linguagem C - estruturas

<<< Voltar Avançar >>>

14. Estruturas

As estruturas são utilizadas para agrupar informações relacionadas de tipos de dados diferentes. Digamos que você precisa controlar os seguintes dados relacionados ao estoque de um pequeno estabelecimento comercial:

Este seria um caso para o uso de estruturas, pois relacionados a cada produto teremos dados do tipo int(código,quantidade), char(nome, observações) e float(valor de compra, valor de venda, lucro).


14.1 Declarando uma estrutura

A sintaxe para a declaração (ou criação) de uma estrutura é:

struct NOME_DA_ESTRUTURA
  {
     TIPO CAMPO1;
     TIPO CAMPO2;
     ...........
     ...........
     TIPO CAMPOn;
  };

Para o caso exemplificado no item anterior poderíamos ter algo como:

struct produto
  {
    int codigo;
    char nome[50];
    int quantidade;
    float valor_compra;
    float valor_venda;
    float lucro;
    char obs[200];
  };

É importante observar que a declaração da estrutura não cria, ainda, uma variável. A declaração da estrutura apenas cria um novo tipo de dado. Após criar a estrutura você pode declarar variáveis do tipo de estrutura criado.


14.2 Declarando variáveis do tipo de uma estrutura criada

Após a declaração da estrutura você pode declarar variáveis do tipo da estrutura com a sintaxe:

struct NOME_DA_ESTRUTURA NOME_DA_VARIÁVEL;

Exemplo:

struct produto item;

Observe que esta sintaxe obecede a sintaxe normal para a declaração de variáveis:

TIPO NOME_DA_VARIÁVEL;

sendo o TIPO da variável, a nova estrutura criada ( struct NOME_DA_ESTRUTURA ).

Você também pode declarar a variável logo após a declaração da estrutura com uma sintaxe do tipo:

struct produto
  {
    int codigo;
    char nome[50];
    int quantidade;
    float valor_compra;
    float valor_venda;
    float lucro;
    char obs[200];
  }item;

14.3 Acessando os campos de uma estrutura

A sintaxe para acessar e manipular campos de estruturas é a seguinte:

NOME_DA_ESTRUTURA.CAMPO

Observe o código abaixo para um melhor esclarecimento:

/* acessando os campos de uma estrutura */

#include <stdio.h>

/* criando um novo tipo de dado "produto" */
struct produto
  {
    int codigo;
    char nome[50];
    int quantidade;
    float valor_compra;
    float valor_venda;
  };


int main()
  {
     /* declarando uma variável "item" do tipo "struct produto" */
    struct produto item;

    printf("Preenchendo a variável \"item\"\n");
    printf("Item............:");
    fgets(item.nome,50,stdin);
    printf("Código..........:");
    scanf("%d",&item.codigo);
    printf("Quantidade......:");
    scanf("%d",&item.quantidade);
    printf("Valor de compra.:");
    scanf("%f",&item.valor_compra);
    printf("Valor de revenda:");
    scanf("%f",&item.valor_venda);
    printf("\n");
    printf("Exibindo os dados\n");
    printf("Código..........:%d\n",item.codigo);
    printf("Item............:%s",item.nome);
    printf("Quantidade......:%d\n",item.quantidade);
    printf("Valor de compra.:%.2f\n",item.valor_compra);
    printf("Valor de revenda:%.2f\n",item.valor_venda);

    return(0);
  }

14.4 Acessando uma estrutura com ponteiros

Para acessar uma estrutura usando ponteiros você pode usar duas sintaxes:

(*NOME_DA_ESTRUTURA).CAMPO

ou

NOME_DA_ESTRUTURA->CAMPO

Exemplo:

/* acessando uma estrutura com ponteiros */

#include <stdio.h>

struct registro
  {
    char nome[30];
    int idade;
  };


altera_estrutura1(struct registro *ficha)
  {
    (*ficha).idade -= 10;
  }

altera_estrutura2(struct registro *ficha)
  {
    ficha->idade += 20;
  }

int main()
  {
    struct registro ficha;

    printf("Entre com seu nome:");
    fgets(ficha.nome,30,stdin);
    printf("Qual sua idade?");
    scanf("%d",&ficha.idade);

    printf("\nExibindo os dados iniciais\n");
    printf("Nome: %s",ficha.nome);
    printf("Idade: %d.\n",ficha.idade);

    altera_estrutura1(&ficha);
    
    printf("\nExibindo os dados após a primeira alteração\n");
    printf("Nome: %s",ficha.nome);
    printf("Idade: %d.\n",ficha.idade);

    altera_estrutura2(&ficha);
    
    printf("\nExibindo os dados após a segunda alteração\n");
    printf("Nome: %s",ficha.nome);
    printf("Idade: %d.\n",ficha.idade);

    return(0);
  }

<<< Voltar Avançar >>>