Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo www.decom.ufop.br/toffolo.

Slides:



Advertisements
Apresentações semelhantes
Laboratório de programação III Linguagem C
Advertisements

Marco Antonio Montebello Júnior
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
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
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Ponteiros em C.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Universidade de Brasília
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Alocação Dinâmica de Memória
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
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 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Estruturas de Dados com Jogos
Alocação Dinâmica de Memória
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.
Alocação Dinâmica de Memória
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Estruturas de Dados Aula 5: Matrizes
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Leandro Almeida  Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Algoritmos e Estruturas de Dados I – Ponteiros
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 Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
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.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Algoritmos e Estruturas de Dados
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
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.
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
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
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
Jean Carlo Mendes
Fundamentos de Programação 1
Transcrição da apresentação:

Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo

Alocação Estática x Dinâmica Na alocação estática, o espaço para as variáveis é reservado no início da execução:  int a; int b[20]; Na alocação dinâmica, o espaço para as variáveis pode ser alocado dinamicamente durante a execução do programa.

Alocação Dinâmica As variáveis alocadas dinamicamente são chamadas de Apontadores (pointers) pois na verdade elas armazenam o endereço de memória de uma variável A memória alocada dinamicamente faz parte de uma área de memória chamada heap Basicamente, o programa aloca e desaloca porções de memória do heap durante a execução

Esquema de Memória

Liberação de Memória A memória deve ser liberada após o término de seu uso A liberação deve ser feita por quem fez a alocação:  Estática: compilador  Dinâmica: programador

Alocação Dinâmica vs Estática Declaração da variável Tipo *p; Tipo p; Alocação de memória para a variável (apenas alocação dinâmica) p = (Tipo*) malloc(sizeof(Tipo)); Liberação de memória (apenas alocação dinâmica) free(p); Conteudo da variável *p; p; Referência de memória da variável p; &p; Valor nulo para um apontador (apenas alocação dinâmica) NULL;

Alocação Dinâmica int *a, b;... b = 10; a = (int *) malloc(sizeof(int)); *a = 20; a = &b; a 20 b Heap Alocação Estática 10 X

Erros Comuns Esquecer de alocar memória e tentar acessar o conteúdo da variável Copiar o valor do apontador ao invés do valor da variável apontada Esquecer de desalocar memória Ela é desalocada ao fim do programa ou procedimento função onde a variável está declarada, mas pode ser um problema em loops Tentar acessar o conteúdo da variável depois de desalocá-la

A pergunta que não quer calar... int *a não é a declaração de um vetor de int? Em C, todo apontador pode se comportar como vetor: Portanto pode-se fazer coisas como: int a[10], *b; b = a; b[5] = 100; printf(“%d\n”, a[5]); printf(“%d\n”, b[5]); int a[10], *b; b = (int *) malloc(10*sizeof(int)); b[5] = 100; printf(“%d\n”, a[5]); printf(“%d\n”, b[5]); Obs. Não se pode fazer a = b no exemplo acima

Apontadores para Tipos Estruturados Apontadores são normalmente utilizados com tipos estruturados typedef struct { int idade; double salario; } TRegistro ; int main() { TRegistro *a;... a = (TRegistro *) malloc(sizeof(TRegistro)) a->idade = 30; // (*a).idade = 30 a->salario = 80;... }

Passagem de Parâmetros Em pascal, parâmetros para função podem ser passados por valor ou por referência Por valor: o parâmetro formal (recebido no procedimento) é uma cópia do parâmetro real (passado na chamada) Por referência: o parâmetro formal (recebido no procedimento) é uma referência para o parâmetro real (passado na chamada) Em C só existe passagem por valor (sempre gera cópia), logo deve-se implementar a passagem por referência utilizando-se apontadores

Passagem de Parâmetros (C) void SomaUm(int x, int *y) { x = x + 1; *y = (*y) + 1; printf("Funcao SomaUm: %d %d\n", x, *y); } int main() { int a = 0, b = 0; SomaUm(a, &b); printf("Programa principal: %d %d\n", a, b); } 1 0 1

Passagem de Parâmetros E para alocar memória dentro de um procedimento? Em pascal, basta passar a variável (apontador) como referência. Em C também, mas como não há passagem por referência as coisas são um pouco mais complicadas void aloca(int *x, int n) { x=(int *)malloc(n*sizeof(int)); x[0] = 20; } int main() { int *a; aloca(a, 10); a[1] = 40; } Error! Access Violation! void aloca(int **x, int n) { (*x)=(int*)malloc(n*sizeof(int)); (*x)[0] = 20; } int main() { int *a; aloca(&a, 10); a[1] = 40; } OK

Exercício 1 Criar um tipo que é uma estrutura que represente uma pessoa, contendo nome, data de nascimento e CPF. Criar uma variável que é um ponteiro para esta estrutura (no programa principal) Criar uma função que recebe este ponteiro e preenche os dados da estrutura Criar uma função que recebe este ponteiro e imprime os dados da estrutura Fazer a chamada a estas funções na função principal

Exercício 2 1.Faça um programa que leia um valor n, crie dinamicamente um vetor de n elementos e passe esse vetor para uma função que vai ler os elementos desse vetor. 2. Declare um TipoRegistro, com campos a inteiro e b que é um apontador para char. No seu programa crie dinamicamente uma váriavel do TipoRegistro e atribua os valores 10 e ‘x’ aos seus campos.