Professional Documents
Culture Documents
setembro de 2001
Manaus - AM
Alocação de Memória
PROBLEMA
SOLUÇÃO
VARIÁVEL VARIÁVEL
PONTEIRO DINÂMICA
VARIÁVEL VARIÁVEL
PONTEIRO DINÂMICA
1237 5
1237
Alocação de Memória
ALOCAR
DESALOCAR
ALOCAR (ptr)
PROCEDIMENTOS BÁSICOS
ALOCAR - MALLOC
pint = (int *) malloc (sizeof (int)); // Cria a var dinâmica *pint pint 340 *pint
DESALOCAR - FREE 340
INTERESSANTE
– Em JAVA, a alocação dinâmica de memória é realizada
implicitamente pela linguagem.
» Criar um OBJETO, significa ALOCAR uma porção de
MEMÓRIA DINAMICAMENTE.
Alocação de Memória
Alocação Dinâmica em C
DECLARAÇÕES
IMPORTANTE:
OPERAÇÕES C/ PONTEIROS
y = *ptr; 1 1 100
y = *ptr; 1 1 100
*ptr = 3; 3 1 100
40 320
Alocação de Memória
Alocação Dinâmica em C
IMPORTANTE
– Um ponteiro para qualquer tipo é um endereço na memória - que
geralmente é um endereço inteiro.
– A razão para que seja associado um ponteiro para um tipo de dado é para
saber com quantos bytes será necessário para o dado ser armazenado.
Quando se incrementa o ponteiro, na verdade, se incrementa o ponteiro por
um “bloco de memória”.
Desta forma:
Uma operação de soma num ponteiro do tipo char - ++ch_ptr adiciona 1
byte para o endereço;
Uma operação de soma num ponteiro do tipo inteiro ou float - ++int_ptr ou
++fl_ptr adiciona 2 bytes e 4 bytes para o endereço, respectivamente.
Alocação de Memória
Alocação Dinâmica em C
IMPORTANTE
Considere uma variável float (fl) e um ponteiro para um float (fl_ptr):
1 float (4 bytes)
fl
flp ++flp flp+2
main()
{ int x, y, *px, *py;
x = 34; y=10;
px=&x;
py=px;
printf(“x=%d\n”,x);
printf(“&x=%d\n”,&x);
printf(“px=%d\n”,px);
printf(“*px=%d\n”,*px);
printf(“y=%d\n”,y);
printf(“&y=%d\n”,&y);
printf(“py=%d\n”,py);
printf(“*py=%d\n”,*py); }
Alocação de Memória
Alocação Dinâmica em C
PONTEIRO PARA PONTEIRO
– Um ponteiro para um ponteiro é uma forma de indicação múltipla.
– Num ponteiro normal, o valor do ponteiro é o valor do endereço da variável que
contém o valor desejado.
– Neste caso, o primeiro ponteiro contém o endereço do segundo, que aponta para a
variável que contém o valor desejado.
PONTEIROS
LISTA LIGADA
É uma lista de pares, cada um consistindo de um elemento e um ponteiro, tal
que cada ponteiro contém o endereço do próximo par:
Cada par é representado por um REGISTRO;
A lista ligada pode ser percorrida seguindo os endereços dos ponteiros -
busca linear:
Não é possível o acesso direto a cada elemento da lista ligada.
LISTAS LIGADAS
DESVANTAGENS
Usando um endereço especial, chamado NIL, que é uma referência para ninguém.