Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Documentos relacionados
LINGUAGEM C: ALOCAÇÃO DINÂMICA

Programação Computacional Aula 16: Alocação Dinâmica de Memória

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Estrutura de Dados. Aula 07 Alocação Dinâmica

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Aula 17: Ponteiros e Alocação Dinâmica em C

3. Linguagem de Programação C

Princípios de Desenvolvimento de Algoritmos MAC122

Estrutura de dados 1. Ponteiros

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Alocação Dinâmica de Memória. Programação II

LINGUAGEM C: PONTEIROS

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

Alocação Dinâmica em C

Ponteiros. Introdução e Alocação Dinâmica

ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Linguagem C Ponteiros

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Estruturas Dinâmicas - Ponteiros

Ponteiros. Introdução

Modulo 12: alocação dinâmica de memória

Programação I Funções. Prof. Carlos Alberto

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Estruturas dinâmicas Ponteiros

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Laboratório de Introdução à Ciência da Computação I

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Reinaldo Gomes Alocação Dinâmica

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

- Mapa de memória de um processo - Ponteiros

Alocação Dinâmica. Introdução à Computação

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Laboratório de Programação II

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

x=0; y=x+1; x=&y+2; x 1000 y 1004

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Módulo 5 Vetores e Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Matrizes. Estruturas de Dados Aula 5: Matrizes. Vetor declaração estática. Vetor declaração dinâmica

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Estruturas de Dados Aula 5: Matrizes 23/03/2011

Estruturas de Dados Aula 5: Matrizes

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Programação. Cap. 12 Gestão de Memória Dinâmica

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Métodos Computacionais. Vetores e Matrizes Dinâmicas

MC-102 Aula 19 Ponteiros II

Programação: Vetores

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

1 Exercícios com ponteiros

Ponteiros de Variáveis

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

MCTA001 Algoritmos e Estruturas de Dados I Aula 02: Ponteiros e estruturas

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

10 a Aula - Operadores de Molde ( Casting ). Atribuição de Memória. Ponteiros. Enumerados. Mestrado em Engenharia Física Tecnológica

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Ponteiros. prof. Fabrício Olivetti de França

LINGUAGEM C: ARRAY: VETORES E MATRIZES

1 Exercícios com ponteiros

Alocação Dinâmica de Memória - Exercício

Linguagem de Programação

Instituto Federal da Bahia Análise e Desenvolvimento de Sistemas INF029 Laboratório de Programação Aula 03: Ponteiros

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Alocação dinâmica de Memória

Fundamentos de Programação de Computadores Linguagem C Vetor Unidade 09 Linguagem C - Vetor 1/16

Aula 25: Alocação Dinâmica

Tipos Abstratos de Dados. Estrutura de Dados

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica

Programação de Computadores II

Linguagem de Programação C. Ponteiros

Ponteiros e Tabelas. K&R: Capítulo 5

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54

TÉCNICAS DE PROGRAMAÇÃO. Estrutura de dados

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

11a. Aula Ponteiros e Vetores

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Curso de Programação C em Ambientes Linux Aula 04

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

Transcrição:

Programação I Ponteiros e alocação dinâmica de memória Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br

Ponteiros O ponteiro é um tipo de dado como int, char ou float; Variáveis do tipo ponteiro são destinadas a guardar e manipular endereços de memória; Por meio do endereço pode-se acessar a informação, dizendo que a variável ponteiro aponta para uma posição de memória.

Ponteiros Operador &: operador unário que devolve o endereço na memória de seu operando. Exemplo: ptr = &cont; Guarda o endereço na memória da variável cont em ptr; Esse endereço é a posição interna da variável na memória do computador e não tem nenhuma relação com o valor de cont. O operador & tem como significado o endereço de.

Ponteiros Operador *: operador unário que devolve o valor da variável localizada no endereço que o segue. Por exemplo, se ptr contém o endereço da variável cont: q = *ptr; coloca o valor de cont em q. O operador * tem como significado no endereço de.

Ponteiros A declaração de uma variável ponteiro é dada pela colocação de um asterisco (*) na frente de uma variável de qualquer tipo: Exemplo: int *ptr; float *q Na linguagem C, é possível definir ponteiros para os tipos básicos ou estruturas.

Ponteiros A definição de um ponteiro não reserva espaço de memória para o seu valor e sim para o seu conteúdo. Antes de utilizar um ponteiro, o mesmo deve ser inicializado. Deve ser colocado um endereço de memória válido para ser acessado posteriormente.

Ponteiros Um ponteiro pode ser utilizado de duas maneiras distintas: Trabalhar com o endereço armazenado no ponteiro; Trabalhar com a área de memória apontada pelo ponteiro. Para trabalhar com o endereço armazenado no ponteiro, utiliza-se o seu nome sem o asterisco na frente. Assim qualquer operação realizada será feita no endereço do ponteiro.

Ponteiros Para trabalhar com a memória apontada pelo ponteiro, alterando ou acessando este valor deve-se colocar um asterisco antes do nome do ponteiro. Assim, qualquer operação realizada será feita no endereço de memória apontado pelo ponteiro.

Ponteiros Exemplo

Ponteiros Maior problema em relação ao ponteiro Entender quando se está trabalhando com o seu valor, ou seja, o endereço; Entender quando se está trabalhando com a informação apontada por ele.

Ponteiros Aritmética de ponteiros É possível realizar operações de soma e subtração com variáveis do tipo ponteiro; A quantidade de endereços de memória relativos ao tipo do ponteiro será somada ou subtraída no ponteiro. Exemplo: um ponteiro para int ocupa 4 bytes, uma operação de soma acrescentará 4 posições na memória;

Ponteiros Exemplo

Ponteiros Vetores como ponteiros em C Vetores são ponteiros com alocação estática de memória; Todo vetor na linguagem C é um ponteiro; Através da aritmética de ponteiros é possível acessar os índices do vetor; Formas para se obter o endereço (ponteiro) do início de um vetor: &vet[0]; vet;

Ponteiros Exemplo

Alocação de memória Alocação estática Ocorre em tempo de compilação; No momento em que se define uma variável ou estrutura é necessário definir seu tipo e tamanho; A memória alocada fica disponível até o término do programa (rotina ou função).

Alocação de memória Alocação dinâmica Ocorre em tempo de execução; As variáveis e estruturas são declaradas sem a necessidade de se definir seu tamanho; Durante a execução do programa a memória será reservada e no momento em que não for mais necessária, deve ser liberada.

Alocação de memória A alocação dinâmica é feita com o auxílio de comandos ou funções que permitem reservar e/ou liberar memória. Na linguagem C, a alocação dinâmica de memória pode ser realizada com apenas quatro chamadas a funções: malloc calloc realloc free

Alocação de memória Função malloc Permite a alocação de uma nova área de memória; Parâmetro: quantidade de bytes para alocação. Retorna, se existir memória suficiente, um endereço que para uma variável do tipo ponteiro. Retorna um ponteiro para o tipo void, deve-se utilizar o typecast, transformando este endereço para o tipo de ponteiro desejado.

Alocação de memória Exemplo da função malloc

Alocação de memória Função calloc Tem a mesma funcionalidade de malloc; Parâmetros: a quantidade de posições a serem alocadas e o tamanho do tipo de dado; Além de alocar o espaço, também inicializa o mesmo com zeros.

Alocação de memória Exemplo da função calloc

Alocação de memória Função realloc Permite que uma área previamente alocada seja aumentada ou diminuída; Parâmetro: o ponteiro retornado pelo malloc e a indicação do novo tamanho; O novo tamanho pode ser maior ou menor que o original;

Alocação de memória Função realloc A realocação de memória pode resultar na troca de blocos na memória. Um ponteiro para o bloco é devolvido porque realloc() pode precisar mover o bloco para aumentar seu tamanho. Se isso ocorrer, o conteúdo do bloco antigo é copiado para o novo bloco, e nenhuma informação é perdida.

Alocação de memória Exemplo da função realloc

Alocação de memória Função free Libera uma área alocada previamente com a função malloc, calloc ou realloc; Parâmetro: o endereço que se deseja liberar; Quando alocamos memória dinamicamente é necessário que nós a liberemos quando ela não for mais necessária.

Alocação de memória Exemplo da função free

Alocação de arrays Para armazenar um array o compilador C calcula o tamanho, em bytes, necessário e reserva posições sequenciais na memória Note que isso é muito parecido com alocação dinâmica Existe uma ligação muito forte entre ponteiros e arrays. O nome do array é apenas um ponteiro que aponta para o primeiro elemento do array.

Alocação de arrays Ao alocarmos memória estamos, na verdade, alocando um array. p 0 1... 99

Alocação de arrays Note, no entanto, que o array alocado possui apenas uma dimensão Para liberá-lo da memória, basta chamar a função free() ao final do programa:

Alocação de arrays Para alocarmos arrays com mais de uma dimensão, utilizamos o conceito de ponteiro para ponteiro. Ex.: char ***p3; Para cada nível do ponteiro, fazemos a alocação de uma dimensão do array.

Alocação de arrays Conceito de ponteiro para ponteiro : Memória posição variável conteúdo 119 120 char ***p3 122 121 122 char **p2 124 123 124 char *p1 126 125 126 char letra a 127

Alocação de arrays Em um ponteiro para ponteiro, cada nível do ponteiro permite criar uma nova dimensão no array. Memória posição variável conteúdo 119 int **p 120 120 p[0] 123 121 p[1] 126 122 123 p[0][0] 69 124 p[0][1] 74 125 126 p[1][0] 14 127 p[1][1] 31 128

Alocação de arrays Em um ponteiro para ponteiro, cada nível do ponteiro permite criar uma nova dimensão no array. 1º malloc: cria as linhas 2º malloc: cria as colunas int **p; int **p; int* int* int* int* int int int int int int int int int* int* int int int int int* int* int int int int

Alocação de arrays Diferente dos arrays de uma dimensão, para liberar um array com mais de uma dimensão da memória, é preciso liberar a memória alocada em cada uma de suas dimensões, na ordem inversa da que foi alocada

Alocação de arrays

Referências BACKES, André. Linguagem C: completa e descomplicada. Editora Campus/Elsevier, 2012. LAUREANO, Marcos. Estrutura de Dados com Algoritmos e C. Rio de Janeiro: Brasport, 2008.