Buscar

Ponteiros e Alocação Dinâmica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estrutura de Dados
Ponteiros e Alocação Dinâmica
Introdução
● As linguagens de programação permitem armazenar dados em 
variáveis que correspondem a endereços de memória onde 
determinado dado é armazenado temporariamente.
● Uma variável pode armazenar o endereço de memória de outra 
variável, atuando com uma referência ao conteúdo da outra.
● A esse conceito chamamos de : PONTEIRO
Ponteiros
● Um Ponteiro é o endereço de memória de uma variável qualquer.
● Uma variável do tipo ponteiro guarda apenas o ponteiro (endereço) 
de seu tipo especificado.
● Operadores de ponteiros:
& - (ê comercial)
* - (asterisco) 
Operadores de acesso ao endereço de memória.
Ponteiros
● Variável do tipo ponteiro:
● variável que armazena o endereço de memória de outra variável.
● "Aponta para ..."
● Operadores unários de ponteiros:
● "&" : retorna o endereço de memória de uma variável
● "*" : define uma variável do tipo ponteiro.
 : representa o conteúdo da variável que está apontando.
 : ex: 
int x = 5;
 int* ptr = &x; // atribui o 'endereço de' x à variável ptr.
 *ptr -> representa o conteúdo da variável x. (mesmo que x).
 ptr -> representa o endereço de memória da variável x.
Operador &
● É um operador unário que retorna o endereço de memória de seu 
operando.
● Significa “o endereço de”
Operador &
Memória
5
...
...
0x22ff45
0x22ff46
0x22ff47
0x22ff44
x
&x
Operador *
● É um operador unário que devolve o valor da variável localizada no 
endereço que o segue.
● retorna o endereço de memória de seu operando.
● Operador de complemento de &.
● Significa “valor no endereço de”.
Sintaxe de declaração de uma variável ponteiro:
Onde <tipo de dado> se refere ao tipo base.
 *<nome do identificador> é a variável ponteiro.
<tipo de dado> *<nome do identificador>;
Operador *
Memória
5
...
...
0x22ff45
0x22ff46
0x22ff47
0x22ff44
x
&x
0x22ff440x22ff63
0x22ff64
0x22ff65
0x22ff62
p
...&p *p
Representação da memória
Exemplo ilustrando o desenho da página anterior
Exemplo – Ponteiro com Tipo primitivo
Exemplo – Ponteiro com Tipo primitivo
Exemplo – Ponteiro com Tipo String
Funções de alocação dinâmica 
● As declarações de variáveis abaixo alocam memória para diversas 
variáveis. 
char c; int i; int v[10];
● Essa alocação é estática, pois acontece antes que o programa 
comece a ser executado.
● Existem situações em que a quantidade de memória a alocar só se 
torna conhecida durante a execução da aplicação.
● Para realizar a alocação de memória nessas situações é preciso 
recorrer à alocação dinâmica de memória.
Funções de alocação dinâmica 
● Funções para gerenciamento de memória
● malloc
● free
● Função malloc( )
● Permite alocar x bytes de memória.
● O endereço devolvido por malloc é do tipo "genérico" void *. O programador 
armazena esse endereço num ponteiro de tipo apropriado. 
char * ptr;
ptr = (char*) malloc(1);
char * ptr;
ptr = malloc(1);
Funções de alocação dinâmica 
● operador sizeof 
● é um operador de memória que permite informar quantos bytes de um tipo 
especificado de dado devem ser reservados.
● não é uma função.
char* ptr;
int qtdBytes = 1;
ptr = (char*) malloc(qtdBytes * sizeof (char));
Funções de alocação dinâmica 
● Limitação da alocação dinâmica 
● Se a memória do computador já estiver toda ocupada, malloc não consegue 
alocar mais espaço.
● A função devolve NULL. 
● Convém verificar essa possibilidade antes de prosseguir:
char* ptr;
int qtdBytes = 1;
ptr = (char*) malloc (qtdBytes * sizeof (char));
if (ptr == NULL) {
cout << "Memória cheia! malloc devolveu NULL!\n";
exit (EXIT_FAILURE);
}
Funções de alocação dinâmica 
● Função free( )
● As variáveis alocadas dinâmicamente continuam a existir mesmo depois que a 
execução da função termina. 
● Para liberar a memória ocupada por essas variáveis, é preciso recorrer à 
função free( ).
● Libera a porção de memória alocada por malloc. 
● Avisa o sistema de que o bloco de bytes apontado pela variável está livre. 
● A função free não deve ser aplicada a uma parte de um bloco de bytes 
alocado por malloc, apenas ao bloco todo.
char* ptr;
int qtdBytes = 1;
ptr = (char*) malloc(qtdBytes * sizeof (char));
free(ptr);
ptr = NULL;
Exemplo – Ponteiro com Vetor
Exemplo – Ponteiro com Função 
(retorno da função)
Exemplo – Ponteiro com Função 
(passagem de parâmetros)
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21

Outros materiais