Ponteiros e Estruturas de Dados

Propaganda
DAS5102 – Fundamentos da Estrutura da Informação
Ponteiros e Estruturas de Dados
Este tópico visa apresentar a utilização de estruturas em conjunto com ponteiros. Inicialmente
apresentamos a diretiva struct e seguimos descrevendo como se pode referenciar
estruturas usando ponteiros.
•
•
•
Coleção de variáveis referenciada por um único nome
Maneira conveniente de se ter informações relacionadas agrupadas
A definição de uma estrutura forma um modelo para criação de várias estruturas com
a forma definida
struct <nome_estrutura>
{
<tipo> nome_variavel;
<tipo> nome_variavel;
...
...
}<var1>, ..., <varn>;
Exemplo 1 – sintaxe para definição de estruturas
Toda declaração de estruturas deve começar com a palavra reservada struct seguida por
um identificador, um nome que identifique a estrutura sendo declarada. Todas as variáveis
que comporão os elementos da estrutura devem estar declaradas entre os operadores de
escopo “{” e “}”. Opcionalmente, após o delimitador de escopo, uma ou mais variáveis do tipo
definido pela estrutura podem ser declaradas. É importante notar que a sintaxe de estruturas
requer que um delimitador de comandos “;” seja colocado ao final da declaração.
struct endereço
{
char nome[30];
char rua[40];
char cidade[20];
char estado[2];
unsigned int numero;
char CEP[8];
};
Exemplo 2 – definição de uma estrutura
O exemplo acima demonstra a declaração de uma estrutura que acomoda as informações
requeridas por uma entrada num banco de endereços.
Adicionalmente, podemos declarar quantas variáveis quisermos utilizando a estrutura
definida.
struct endereço end_info;
Exemplo 3 – declaração de variáveis do tipo estrutura
Daniel Duarte Abdala
1
DAS5102 – Fundamentos da Estrutura da Informação
Referenciando Elementos de Estruturas
Podemos acessar os elementos de uma estrutura via o operador de referência “.”.
end_info.nome = “Daniel D. Abdala”;
printf(“%s\n”, end_info.cidade);
Exemplo 4 – acesso a elementos de uma estrutura usando o operador “.”
Atribuição de Estruturas
Similarmente ao que ocorre com relação a variáveis atômicas, podemos atribuir uma variável
tipo estrutura a outra.
struct endereço end1, end2;
end1 = end2;
Exemplo 5 – atribuição de estruturas
Ao atribuirmos uma estrutura a outra, todos os valores dos elementos da estrutura serão
copiados.
#include <stdio.h>
void main( void )
{
struct{
int a,b;
}x, y;
x.a = 10;
y = x;
printf(“%d\n”,y.a);
}
Exemplo 6 – atribuição de estruturas
Arrays de Estruturas
Podemos criar arrays de estruturas.
struct endereco end_info[1000];
printf(“%d”, end_info[979].numero);
printf(“%s”, end_info[178].nome);
Exemplo 7 –
Daniel Duarte Abdala
2
DAS5102 – Fundamentos da Estrutura da Informação
Passando Estruturas para Funções
Estruturas podem ser passadas como argumentos para funções tal como qualquer outro tipo
de variável. Elas podem ser tanto passadas por valor ou por referência.
struct stc{
int a,b;
char ch;
};
void f1(struct stc stc1);
void main(void)
{
struct stc s1;
s1.a = 1979;
f1(s1);
}
void f1(struct stc stc1)
{
printf(“%d”, stc1.a);
}
Exemplo 8 – passagem de estruturas por valor para funções
A passagem de estruturas por referência segue as mesmas regras de passagem de parâmetros
por referências vistas anteriormente. Exemplos serão apresentados a seguir.
Ponteiros para Estruturas
Em geral, ponteiros para estruturas funcionam exatamente como para variáveis comuns. Com
algumas exceções.
struct stc *pstc;
Exemplo 9 – declaração de uma variável ponteiro para estruturas
struct bal{
float balanco;
char nome[30];
}pessoal;
struct *ps; //declara um ponteiro para
//estrutura
ps = &pessoa;
Exemplo 10 – ponteiros para estruturas
Quando referenciamos uma estrutura indiretamente via um ponteiro, devemos utilizar um
operador diferente “->” para referenciar os elementos da estrutura.
printf(“%f”, ps->balanco);
Exemplo 11 – acesso a elementos de uma estrutura apontada por um ponteiro
Daniel Duarte Abdala
3
DAS5102 – Fundamentos da Estrutura da Informação
Lista de Exercícios
1. Em que caso devemos usar o operador “.” e o operador “->” para acessar os elementos
de uma estrutura? Explique e de exemplos.
2. Escreva um programa que represente pontos tridimensionais. Utilize estruturas para
representar os pontos. O programa deve requisitar ao usuário que ele informe 2
pontos. A seguir o programa deve calcular a distância entre os pontos e informar ao
usuário. Crie uma função para calcular a distância entre os pontos. Passe as duas
estruturas representando os pontos por valor.
3. Crie uma função que mova o ponto passado como referência uma unidade para a
esquerda. (incremente a coordenada x em uma unidade)
4. Crie um programa para gerenciar uma agenda de telefones. Inicialmente uma
estrutura deve ser composta por nome, e número de telefone. Utilize arrays de
estruturas para armazenar a agenda. Crie funções para inserção e alteração de
registros da agenda.
Daniel Duarte Abdala
4
Download