| <<< 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:
- código
- nome do produto
- quantidade estocada
- valor de compra
- valor a ser vendido
- lucro
- observacões sobre o produto
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 >>> |