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