Técnicas de Programação: ESTRUTURAS, UNIÕES E TIPOS DEFINIDOS PELO USUÁRIO Prof. Protásio DEE UFPB 1
Estruturas É uma coleção de variáveis que são referenciadas sob um único nome. Uma estrutura fornece um modo conveniente de manter informações relacionadas juntas. Exemplo de definição de uma estrutura: struct endereco { char nome[30]; char rua[40]; char cidade[20]; d char estado[3]; unsigned long int cep; }; 2
Elementos de uma Estrutura PALAVRA CHAVE PARA DECLARAÇÃO DE UMA ESTRUTURA struct endereco { char nome[30]; char rua[40]; char cidade[20]; char estado[3]; unsigned long int cep; }; NOME DA ESTRUTURA (descritor) MEMBROS OU ELEMENTOS DA ESTRUTURA 3
Criação de uma Variável A declaração de um estrutura não indica que foi criada uma variável. Declaração de uma variável: struct endereco teste; Deste modo, é declarada ada uma variável estrutura do tipo endereço chamada de teste. 4
Estrutura "teste" na memória nome rua cidade 30 bytes 40 bytes 20 bytes estado 3 bytes cep 4 bytes 5
Declarando uma estrutura e variáveis struct endereco { char nome[30]; char rua[40]; char cidade[20]; d char estado[3]; unsigned long int cep; }teste, endera, enderb; 6
Criando somente uma variável estrutura struct { char nome[30]; char rua[40]; char cidade[20]; d char estado[3]; unsigned long int cep; }teste; O descritor é dispensável 7
Forma Geral de Declaração de uma Estrutura struct descritor { tipo nome-variável; tipo nome-variável; tipo nome-variável;... tipo nome-variável; }variáveis-estrutura; estrutura; 8
Acessando os Membros da Estrutura É utilizado o operador. ("ponto") Exemplo teste.cep = 12345; Forma geral nome-variável-estrutura.nome-membro = valor; 9
Exemplos de Uso Imprimir o cep na tela: printf("cep = %ld", teste.cep); Receber dados do teclado: gets(teste.nome); Acessar caracteres individuais: id i int i; for (i=0; teste.nome[i];++i) putchar(teste.nome[i]); 10
Atribuições de Estruturas #include <stdio.h> int main(){ struct { int a; int b; }x, y; x.a = 10; x.b = 20; y = x; /* atribui uma estrutura para outra */ } printf("conteudo de y: %d %d.", y.a, y.b); return 0; 11
Exemplo Matrizes de Estruturas Para declarar uma matriz de 100 elementos da estrutura endereco: struct endereco teste[100]; Para acessar uma estrutura específica da matriz: printf("%ld", teste[2].cep; 12
Passando Membros de Estrutura para struct aluno{ char tipo[40]; int y; float z; }miguel; Funções func(miguel.y); //passa o valor do inteiro y func2(miguel.tipo); func3(&miguel.z); 13
Passando Estrutura para Funções #include <stdio.h> struct exemplo{ int a, b; }; void f1(struct exemplo parm) int main(){ struct exemplo arg; /* declara arg */ arg.a = 1000; f1(arg); return 0; } void f1(struct exemplo parm){ printf("%d.", parm.a); } 14
Estrutura Ponteiros para Estruturas struct salario{ float valor; char nome[40]; }mario; Declarando um ponteiro para estrutura struct salario *p; Usando um ponteiro para estrutura p = &mario; 15
Ponteiros para Estruturas Acessando os membros de uma estrutura usandoum ponteiro. É necessário usar o operador "seta" > p->valor Exemplo printf("salario de %s eh %g", p->nome, p->valor); 16
Operadores. e > Use o operador. para acessar membros da estrutura quando estiver trabalhando na própria estrutura. Use o operador > > ao referenciar uma estrutura por meio de um ponteiro. 17
Campos de bits Meio pelo qual se pode fazer acesso a um único bit. Vantagens: Se a memória for limitada, pode se armazenar várias variáveis booleanas em um byte. Certas interfaces de dispositivos transmitem informações codificadas nos bits dentro de um único byte. Certas rotinas de criptografia precisam acessar os bits dentro de um byte. 18
Forma geral struct descritor { }; Em que: tipo nome1 : tamanho; tipo nome2 : tamanho;... tipo nomen : tamanho; Campos de bits Tipo só pode ser int, unsigned ou signed. Valores de 1 bit só podem ser unsigned. Tamanho éonúmerodebitsassociado. 19
Exemplo struct t dispositivo{ iti { Campos de bits unsigned ativo : 1; unsigned pronto : 1; unsigned erro : 1; }impressora; Disposição na memória Um byte 0 1 2 3 4 5 6 7 Não usado Impressora.erro Impressora.pronto Impressora.ativo 20
Uniões É uma posição de memória que é compartilhada por diversas variáveis. Exemplo: union teste{ int i; char cr; } exemplo1; Disposiçãonamemóriai ói i Byte 0 Byte 1 cr 21
Uniões Exemplo útil: como acessar os bytes de um inteiro (2 bytes) Declaração union teste{ int i; char cr[2]; } exemplo1; Lendo o byte superior de i exemplo1.cr[0] Lendo o byte inferior de i exemplo1.cr[1] 22
Exercício Faça um programa que realize o cadastro de alunos da turma. Utilize uma estrutura. 23