A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Linguagem de Programação 1 Estruturas e Tipos de Dados em C."— Transcrição da apresentação:

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

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

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

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

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

6 Novos tipos de dados podem ser definidos utilizando-se a palavra-chave typedef. Novos tipos de dados podem ser definidos utilizando-se a palavra-chave typedef. Declarando uma estrutura utilizando typedef typedef struct nome_da_estrutura { campo_1; campo_2;... campo_n; } nome_do_tipo; typedef struct nome_da_estrutura { campo_1; campo_2;... campo_n; } nome_do_tipo;

7 vExemplo: wCom 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). Declarando uma estrutura utilizando typedef typedef struct ponto { int x; int y; } tipoPonto; tipoPonto ponto_central; typedef struct ponto { int x; int y; } tipoPonto; tipoPonto ponto_central;

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

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 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; }; struct ficha_pessoal { char nome[50]; long int telefone; struct tipo_endereco endereco; };

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

11 .. Acessando os campos de uma estrutura vPodemos acessar individualmente os campos de uma determinada estrutura como se fossem variáveis comuns. vA sintaxe para acessar e manipular campos de estruturas é a seguinte:

12 struct ficha_pessoal aluno; cout<>aluno.telefone; struct ficha_pessoal aluno; cout<>aluno.telefone; 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. 1

13 Vetor de estruturas vUsado quando precisamos de diversas cópias de uma estrutura. vPor 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 vPodemos atribuir uma variável de estrutura a outra variável da mesma estrutura: wExemplo: wNeste 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 struct ficha_pessoal primeira, segunda; //faz a leitura dos campos de primeira segunda = primeira; //atribuição

15 Ponteiros para estruturas vComo 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; struct ficha_pessoal *aluno; OU tficha *aluno;

16 Ponteiros para estruturas vPara acessar uma estrutura com ponteiros pode-se usar duas sintaxes: wOperador ponto: wOperador seta: *. -> 3

17 Passando estruturas para funções vPodemos passar estruturas inteiras ou apenas campos destas como argumento para funções. vTal passagem pode ser realizada por valor ou por referência. vAs 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 vEste 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 funcao( variavel,...) // Chamada funcao(estrutura.campo,...); // Definicao formal funcao( variavel,...)

19 Passando estruturas para funções :: Passando campos por referência vDa 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 funcao( *variavel,...) // Chamada funcao(&estrutura.campo,...); // Definicao formal funcao( *variavel,...)

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

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

22 Passando estruturas para funções :: Passando vetor de estruturas vFunciona de forma semelhante a vetor de variáveis simples. vPermite apenas passagem de parâmetros por referência, pois trata-se, afinal, de um vetor. // Chamada funcao(vetor,...); // Definicao formal funcao(struct vetor[],...) // Chamada funcao(vetor,...); // Definicao formal funcao(struct 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"); 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 v vA função sizeof(tipo) retorna o tamanho em bytes ocupado em memória pelo tipo de dado passado como parâmetro v vExemplo: w wsizeof(int) => 2 bytes w wsizeof(char) => 1 byte w wsizeof(struct aluno) => 14 bytes w wsizeof(struct aluno *) => 14 bytes 6

25 QuestõesQuestões


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

Apresentações semelhantes


Anúncios Google