1 / 25

Linguagem de Programação 1

Linguagem de Programação 1. Estruturas e Tipos de Dados em C. Estruturas – Conceito. Uma estrutura ( struct ) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome.

Download Presentation

Linguagem de Programação 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linguagem de Programação 1 Estruturas e Tipos de Dados em C

  2. Estruturas – Conceito • Uma estrutura (struct) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome. • Estruturas constituem um recurso importante para organizar os dados utilizados por um programa pois trata um grupo de valores como uma única variável. • Estruturas são classificadas como variáveis compostas heterogêneas, pois podem agrupar variáveis de tipos diferentes. • Em contraposição, temos os vetores e matrizes, classificados como variáveis compostas homogêneas, pois somente agrupam variáveis do mesmo tipo.

  3. Estruturas – Declaração • Exemplo de declaração de uma estrutura em C: struct ponto { int x; int y; }; • A palavra-chave struct informa ao compilador que um modelo de estrutura está sendo definido. • “ponto” é uma etiqueta que dá nome à definição da estrutura. • Uma definição de estrutura é um comando, por isso deve terminar em ponto-e-vírgula.

  4. Estruturas – Declaração • Os nomes declarados entre as chaves são os campos (ou membros) da estrutura. • Os campos de uma mesma estrutura devem ter nomes diferentes. • Porém, estruturas diferentes podem conter campos com o mesmo nome. • A definição de uma estrutura não reserva qualquer espaço na memória. • Note que, no exemplo dado, nenhuma variável foi declarada de fato, apenas a forma dos dados foi definida. • Essa definição, porém, cria um novo tipo de dados, que pode ser usado para declarar variáveis.

  5. Declarando uma variável de tipo estrutura • Duas maneiras de declarar a variável p do tipo ponto: struct ponto { int x; int y; }; ... struct ponto p; struct ponto { int x; int y; } p; ou • Dois comandos: • Defineestrutura • Declara variável da estrutura definida • Um comando: • Defineestrutura e declara variável da estrutura definida

  6. Declarando uma estrutura utilizando typedef • Novos tipos de dados podem ser definidos utilizando-se a palavra-chave typedef. typedef structnome_da_estrutura { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n; } nome_do_tipo;

  7. Declarando uma estrutura utilizando typedef • Exemplo: • Com um typedef definido para a estrutura podemos utilizar apenas o nome do tipo (typedef) na declaração de uma variável (sem precisar usar a palavra-chave struct). typedef struct ponto { int x; int y; } tipoPonto; tipoPonto ponto_central;

  8. Estruturas – Declaração • Os campos de uma estrutura podem ser de qualquer tipo, inclusive uma estrutura previamente definida. Sendo assim uma estrutura pode conter: • Tipos de dados simples (int, char, double, ...) • Vetores e Matrizes • Outras estruturas. • Porém, o tipo dos campos não podem ser o do próprio tipo que está sendo definido.

  9. Estruturas – Declaração (Exemplos) struct tipo_endereco { char rua[50]; int numero; char bairro[20]; char cidade[30; char sigla_estado[3]; long int CEP; }; struct ficha_pessoal { char nome[50]; long int telefone; struct tipo_endereco endereco; };

  10. Declarando uma estrutura • A definição do formato de uma estrutura pode ser feita dentro da função principal (main) ou fora dela. • Usualmente, declara-se fora da função principal, de modo que outras funções também possam “enxergar” a estrutura definida.

  11. Acessando os campos de uma estrutura • Podemos acessar individualmente os campos de uma determinada estrutura como se fossem variáveis comuns. • A sintaxe para acessar e manipular campos de estruturas é a seguinte: <nome_da_variável_da_estrutura>.<campo>

  12. Leitura dos campos de uma estrutura • A leitura dos campos de uma estrutura a partir do teclado deve ser feita campo a campo, como se fossem variáveis independentes. struct ficha_pessoal aluno; cout<<Digite o nome do aluno: ”; gets(aluno.nome); cout<<“Digite o telefone do aluno: ”; cin>>aluno.telefone; 1

  13. Vetor de estruturas • Usado quando precisamos de diversas cópias de uma estrutura. • Por exemplo, cada aluno de uma turma constitui um elemento de um vetor, cujo tipo é uma estrutura de dados que define as características de cada aluno. struct etiqueta variável[dimensão]; 2

  14. Atribuindo estruturas • Podemos atribuir uma variável de estrutura a outra variável da mesma estrutura: • Exemplo: • Neste caso todos os campos da estrutura primeira serão copiados para a segunda. • struct ficha_pessoal primeira, segunda; • //faz a leitura dos campos de primeira • segunda = primeira; //atribuição

  15. Ponteiros para estruturas • Como outros tipos de dados, ponteiros para estruturas são declarados colocando-se o operador * na frente do nome da variável estrutura: struct ficha_pessoal *aluno; OU tficha *aluno;

  16. Ponteiros para estruturas • Para acessar uma estrutura com ponteiros pode-se usar duas sintaxes: • Operador ponto: • Operador seta: *<ponteiro_estrutura>.<campo> <ponteiro_estrutura>-><campo> 3

  17. Passando estruturas para funções • Podemos passar estruturas inteiras ou apenas campos destas como argumento para funções. • Tal passagem pode ser realizada por valor ou por referência. • As estruturas manipuladas por mais de uma função devem ser declaradas globalmente, antes da definição da função.

  18. Passando estruturas para funções:: Passando campos por valor • Este processo é realizado da mesma forma que para variáveis simples, atentando-se para as peculiaridades das estruturas de dados. // Chamada funcao(estrutura.campo, ...); // Definicao formal <tipo> funcao(<tipo> variavel, ...)

  19. Passando estruturas para funções:: Passando campos por referência • Da mesma forma que acontece para variáveis simples, deve-se pôr o operador & antes do nome da estrutura na chamada da função. // Chamada funcao(&estrutura.campo, ...); // Definicao formal <tipo> funcao(<tipo> *variavel, ...)

  20. Passando estruturas para funções:: Passando estruturas inteiras por valor • Ao contrário de arrays, estruturas podem ser passadas por valor como argumentos de função. • Para estruturas grandes, há o problema da cópia de valores na pilha de memória. // Chamada funcao(estrutura, ...); // Definicao formal <tipo> funcao(struct <etiqueta> estrutura, ...) 4

  21. Passando estruturas para funções:: Passando estruturas inteiras por referência • Permite alteração da estrutura sem necessidade de criação de uma cópia na memória. // Chamada funcao(&estrutura, ...); // Definicao formal <tipo> funcao(struct <etiqueta> *estrutura, ...) 5

  22. Passando estruturas para funções:: Passando vetor de estruturas • Funciona de forma semelhante a vetor de variáveis simples. • Permite apenas passagem de parâmetros por referência, pois trata-se, afinal, de um vetor. // Chamada funcao(vetor, ...); // Definicao formal <tipo> funcao(struct <etiqueta> vetor[], ...)

  23. Espaço alocado para uma estrutura struct aluno { char nome[4]; /* array 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */ }; struct aluno al; Strcpy(al.nome, “Rui“); al.idade = 30; strcpy(al.matricula, "00/0001");

  24. A função sizeof • A função sizeof(tipo) retorna o tamanho em bytes ocupado em memória pelo tipo de dado passado como parâmetro • Exemplo: • sizeof(int) => 2 bytes • sizeof(char) => 1 byte • sizeof(struct aluno) => 14 bytes • sizeof(struct aluno *) => 14 bytes 6

  25. Questões

More Related