Prévia do material em texto
ESTRUTURAS E NOVOS TIPOS EM C Algoritmos e Programação II Profa. Fernanda De Nardin Walker Typedef A linguagem C permite que o programador defina novos nomes aos tipos de dados existentes ou mesmo novos tipos de dados. Isso é possível através da palavra-reservada typedef typedef tipo nome; Isso é particularmente interessante quando usamos estruturas podemos criar um novo tipo para definir a estrutura e depois declarar variáveis desse tipo (inclusive vetores). Typedef com Struct typedef struct Alunos { //código da //struct } Aluno; Aluno joao, maria; Esse código faz com que possamos chamar "struct Alunos" apenas por 'Aluno'. 'Aluno' não é uma variável do tipo struct, é apenas um atalho, uma maneira mais simples de dizer 'struct Alunos'. Mais simples... typedef struct { //código da //struct } Alunos; Agora a podemos definir structs desse tipo apenas usando a palavra 'Alunos'. E até um vetor: Alunos turma[22]; Exemplo struct Livro { char nome[30]; char autor[50]; int paginas; double preco; } struct Livro L1; typedef struct Livro { char nome[30]; char autor[50]; int paginas; double preco; } TIPO_LIVRO; TIPO_LIVRO L1; Passagem de Parâmetros main( ) { TIPO_LIVRO L1; ...... F1(L1); ..... } Por valor: void F1(TIPO_LIVRO L) { printf(“%s”, L.nome); printf(“%s”, L.autor); printf(“%d”, L.paginas); printf(“%lf”, L.preco); } Passagem de Parâmetros main( ) { TIPO_LIVRO L1; ...... F2(&L1); ..... } Por referência: void F2(TIPO_LIVRO *L) { (*L).nome=......; (*L).autor=......; (*L).paginas=xxxx; (*L).preco=xxxxx; } Passagem de Parâmetros main( ) { TIPO_LIVRO L1; ...... F2(&L1); ..... } Por referência: void F2(TIPO_LIVRO *L) { L→nome=......; L→autor=......; L→paginas=xxxx; L→preco=xxxxx; } Vetor de estruturas A partir disso, fica simples declarar um vetor de estrutura: Exemplo: TIPO_LIVRO Livraria[80]; E para acessar os elementos do vetor, usamos, por exemplo: for(i=0;i<80;i++) { Livraria[i].nome... Livraria[i].autor... Livraria[i].paginas... Livraria[i].preco... } Estruturas aninhadas Também podemos criar uma estrutura que contenha outra estrutura, assim: typedef struct { int dia; int mes; int ano; } data; E usar na outra estrutura como: typedef struct Livro { char nome[30]; char autor[50]; int paginas; double preco; data datacompra; } TIPO_LIVRO;