Definição de Tipos Estruturas e Ponteiros

Slides:



Advertisements
Apresentações semelhantes
Marco Antonio Montebello Júnior
Advertisements

Construção de Algoritmos AULA 07
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
TECNOLOGIA EM REDES DE COMPUTADORES Algoritmos e programação de computadores Aula /08/2011 Professor Leomir J. Borba-
Nivelamento de C: Ponteiros e Alocação Dinâmica
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
Algoritmos e Estrutura de Dados I
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade de Brasília
Linguagem C Strings.
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Revisão da Linguagem C.
Apontadores ou Ponteiros
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Alocação Dinâmica de Memória Professor Mário Dantas
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Programação II Parte IX
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
PROGRAMAÇÃO I PONTEIROS.
Estrutura de Dados Avançada
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Estruturas de Dados Aula 5: Matrizes
Estruturas (struct) Marco Antonio Montebello Júnior Estruturas de Dados.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Algoritmos e Estruturas de Dados
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem C.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Leandro Almeida  As declarações abaixo alocam memória para diversas variáveis.  A alocação é estática, pois acontece antes que o programa.
Ponteiros em C Prof. Kariston Pereira
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Programação em C Aula 9.
ponteiros Estrutura de Dados Prof. André Cypriano M. Costa
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Transcrição da apresentação:

Definição de Tipos Estruturas e Ponteiros Aula 2 Definição de Tipos Estruturas e Ponteiros

Estruturas (struct)

Agregados de Dados de objetos elementares ou de outros agregados de elementos homogêneos: array de elementos heterogêneos: struct 153

Estrutura É uma coleção de variáveis referenciadas por um nome Podemos armazenar as coordenadas (x,y) de um ponto

Estruturas A palavra struct informa ao compilador que um modelo de estrutura está sendo definido. Declaração: struct coordenadas { int iX; int iY; }; A estrutura contém 2 variáveis do tipo int, e é chamada de coordenadas

Declaração struct identificador { tipo1 nome1; tipo2 nome2; ... tipoN nomeN; } var_struct; Pode conter um número arbitrário de dados de tipos diferentes Pode-se nomear a estrutura para referencia-la O identificador ou var_struct podem ser omitidos mas não ambos

Nomeando uma Estrutura Caso1: struct coordenadas { int iX; int iY; }; struct coordenadas coord1, coord2; Caso2: struct } coord1, coord2;

Acessar os dados de uma Estrutura Acesso aos dados: var_struct.campo //Atribuições coord1.iX = 10; coord1.iY = 50; coord2.iX = 15; coord2.iY = 25;

Operações com Estruturas Inicializando uma estrutura: struct coordenadas coord1 = {15, 38}; Atribuição entre estruturas do mesmo tipo: struct coordenadas coord2; coord2 = coord1 //coord2.iX = coord1.iX e coord2.iY = coord1.iY; Os campos correspondentes das estruturas são automaticamente da origem para o destino

Passando Estruturas como Parâmetros int iResult(struct coordenadas coord1) { int iSoma; iSoma = coord1.iX + coord1.iY; return(iSoma); } main() int iRet; struct coordenadas temp; temp.iX = 31; temp.iY = 3; iRet = iResult(temp); //iRet = 34

Passando Ponteiros de Estruturas com Parâmetros void Pontos(struct coordenadas *coord) { coord->iX = 19; coord->iY = 85; } main() struct coordenadas Param; Pontos(&Param); //X = 19 – Y = 85 printf(“X = %i - Y = %i”, Param.iX, Param.iY);

Acesso ao Ponteiro -> O acesso ao ponteiro da estrutura é feito através do operador: ->

Definição de Tipos

Definição de Tipos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se esses novos tipos Exemplo typedef char tipo_nome [30]; tipo_nome nome; 146

Tipos definidos pelo usuário Definição de tipo equivale a um padrão instanciado pela definição de variáveis não incorpora novas operações de acesso ao tipo operações: as mesmas dos elementos básicos usados na construção do tipo 149

Typedef e Struct Notação (“C”) Seu emprego typedef struct { int registro; char nome[50]; int idade; float salario; } tipo_funcionario; Seu emprego tipo_funcionario funcionario; funcionario.idade = 35; end_func = &funcionario; 155

Outro Exemplo typedef struct funcionario{ int registro; char nome[50];                              unsigned int idade;                               float salario;                             }func; void main() {          func cadastro[30];

Outro Exemplo typedef struct { int registro; char nome[50];                              unsigned int idade;                               float salario;                             } funcionario; void main() {          funcionario cadastro[30];

Exemplo sem utilizar typedep struct funcionario{ int registro;                              char nome[50];                              unsigned int idade;                               float salario;                             } funcionario; void main() {          struct funcionario cadastro[30];

Ponteiros

Definição Proporciona um modo de acesso a variáveis sem referenciá-las diretamente, utilizando para isto o endereço da variável. A declaração “*” indica que uma variável é um ponteiro Ps.: O uso descuidado de ponteiros pode levar a sérios bugs e a dores de cabeça terríveis :-).

Ponteiros Constantes Não podem ser alterados e permanecem imutáveis durante a execução do programa. Ex: int iNotas[10]; Para acessar a 1ª. posição do vetor pode-se usar: iNotas ou &iNotas[0] 2ª. Posição: &iNotas[1] E assim sucessivamente...

Declaração de Ponteiro <tipo> * <pnome_variavel>; <tipo> Tipo da variável para a qual o ponteiro estará apontando (int, float, char, ...) * Operador de indireção e indica que a variavel é um ponteiro para o <tipo> declarado <nome_variavel> Nome da variável, seguindo as regras de criação de nomes

Declaração de Ponteiro <tipo> * <pnome_variavel>; Antes do nome da variável deve existir o *. É declarado junto com as outras variáveis Exemplos int *ipPonteiro; float *fpPonteiro; char *cpPonteiro;

Criando um Ponteiro Criar uma variável para armazenar o endereço da variável iVar1, a qual iremos chamar de ipVar1 Nesse momento a variável ipVar1 não foi inicializada, apenas foi reservado um espaço para ela.

Criando um Ponteiro Devemos armazenar o endereço de iVar1 na variável ipVar1. Nesse momento podemos dizer que ipVar1 aponta para iVar1 ou é um ponteiro para iVar1 Ps.: Ponteiro é uma variável que contém o endereço de outra variável.

Inicializando um Ponteiro int *ipNum; // declaração de uma variável ponteiro int iNum, iNum2; // declaração de variáveis inteiras ipNum = &iNum; iNum = 50; iNum2 = *ipNum; *ipNum = 100;

Dicas sobre Ponteiro Acessar o endereço da variável ponteiro fpPonteiro printf(“Endereço %f.”, fpPonteiro); Acessar o conteúdo da variável ponteiro *fpPonteiro printf(“Conteúdo: %f.”, *fpPonteiro);

Dicas sobre Ponteiro Acessar o próximo endereço de um ponteiro fpVet++; fpVet = fpVet + n;//n=num de bytes a percorrer fpVet += n; Acessar o endereço anterior de um ponteiro fpVet--; fpVet = fpVet - n;//n=num de bytes a percorrer fpVet -= n;

Dicas sobre Ponteiro Operações equivalentes fVet[2] == *(fpVet + 2)

Alocação Dinâmica Aloca espaço na memória durante a execução do programa (em tempo de execução) Existem funções para alocar, desalocar, realocar e limpar a memória que foi alocada Usuar a biblioteca stdlib.h #include <stdlib.h>

Função: Sizeof Indica o tamanho em bytes de uma variável. sizeof(<tipo>); Tipo: char, int, float, ... printf(“Tam. int: %i.”, sizeof(int)); //4 bytes printf(“Tam. float: %i.”, sizeof(float)); //4 bytes printf(“Tam. double: %i.”, sizeof(double));//8 bytes printf(“Tam. char: %i.”, sizeof(char)); //1 byte

Heap Área de Alocação Dinâmica Consiste de toda a memória disponível que não foi usada para outro propósito. “É o resto da memória” É possível alocar ou liberar dinamicamente a memória do heap através da funções: malloc() calloc() realloc() free()

Função: Malloc Aloca a quantidade de bytes desejada pelo usuário. malloc(<tamanho>); int *ipNum1, *ipNum2; ipNum1 = (int *) malloc(4); //Aloca 4 bytes //5 variáveis inteiras = 5 * 4 = 20 bytes ipNum2 = malloc(5 * sizeof(int));

Função: Malloc A expressão (int *) é utilizado pois a função malloc(), retorna um ponteiro para o tipo void, portanto esse ponteiro deve ser moldado para o tipo de dado apropriado. É um operador unário chamado de operador molde ou cast.

Função: Calloc Aloca memória para um grupo de objetos calloc(<tamanho>, <tam_obj); int *ipNum1, *ipNum2; ipNum1 = (int *) calloc(2, 4); //Aloca 8 bytes //5 variáveis inteiras = 5 * 4 = 20 bytes ipNum2 = (int *) calloc(5, sizeof(int));

Função: Realloc Altera o tamanho de um bloco de memória que foi alocado através do malloc() ou do calloc() realloc(<*ptr>, <tamanho>); int *ipNum1, *ipNum2; ipNum1 = (int *) calloc(2, 4); //Aloca 8 bytes //5 variáveis inteiras = 5 * 4 = 20 bytes ipNum2 = (int *) calloc(5, sizeof(int)); ipNum2 = (int *) realloc(ipNum2, sizeof(int) * 10);

Função: Free Limpa um espaço de memória que foi alocado free(<*ptr>) int *ipNum1, *ipNum2; ipNum1 = (int *) calloc(2, 4); //Aloca 8 bytes //5 variáveis inteiras = 5 * 4 = 20 bytes ipNum2 = (int *) calloc(5, sizeof(int)); //Liberando a memória alocada para ipNum1 e ipNum2 free(ipNum1); free(ipNum2);