Beruflich Dokumente
Kultur Dokumente
REA LIVRE
Alocao Esttica
x
Alocao Dinmica
desvantagens:
tamanho fixo (const maxTam = 1000;)
tempo de compilao
alocados em memria de forma esttica
Alocao Dinmica
implementao eficiente: ponteiros ou
apontadores
vantagens:
tamanho varivel
tempo de execuo
alocados em memria de forma dinmica
desvantagem, ou restrio:
capacidade da memria, acesso sequencial
Variveis Ponteiros
Para declarar um ponteiro de um certo tipo, usa-se a seguinte sintaxe:
TipoBase *nome;
Onde:
TipoBase o tipo da informao que ser apontada pelo ponteiro
(informa o total de bytes ocupados pela informao)
o smbolo * serve para indicar que se trata da definio de um ponteiro
nome corresponde ao nome da varivel ponteiro
p = (int *) malloc(sizeof(int)); II
III
*p = 10;
...
IV
free(p);
}
memria usada
pelo programa
endereo
1FFA
Lixo
10
1FFA
p: Lixo
memria livre
no sistema
Entendendo o cdigo:
int *p;
a varivel p um ponteiro para um nmero inteiro, ou seja, aponta
para um endereo de memria que ser alocado para armazenar um
nmero inteiro (2 bytes)
p = (int *) malloc(sizeof(int));
solicita ao sistema operacional 2 bytes da memria livre e o endereo
do espao alocado colocado na varivel ponteiro p
*p = 10;
no endereo apontado por p armazena o nmero inteiro 10
free(p);
libera o espao de memria ocupado cujo endereo est em p
(devolve o recurso ao sistema operacional)
* * * ALOCAO ESTTICA * * *
void estatica(void) {
fflush(stdin);
const maxTam = 100;
// maxTam = tamanho mximo da lista
int n = 0, i;
// n = quantidade efetiva de itens na lista
TipoItem lista[maxTam], x;
while (1) {
clrscr();
printf("Lista de nomes (Alocao Esttica)\n");
for (i=0; i<n; i++)
printf("%d- %s\n", i, lista[i].nome);
printf("\nInforme um nome, (FIM) para encerrar:\n");
gets(x.nome);
if (strcmp(x.nome, "FIM") == 0)
break;
if (n == maxTam) {
printf("\nErro: lista cheia !");
printf("Pressione [algo] para prosseguir.\n"); getch();
}
else {
lista[n] = x;
// coloca o item "x" na n-sima posio da lista
n = n + 1;
// o prximo item ser colocado na posio n + 1
}
}
}
primeiro
ultimo
Item prox
Joo
Clula
Cabea
Maria
...
Ana
NULL
Ponteiro ou Apontador
Celula
Item prox
2
NULL
1
primeiro
3
ultimo
primeiro->prox = NULL;
primeiro
Celula
ultimo
prox
Item prox
Omero
Maria
NULL
2
Juca
1
x
Ana
4
3
Ana
Item prox
NULL
Celula
ultimo
Carlos
Luana
Item prox
Ana
novo
Daniel
NULL
Celula
ultimo
Carlos
Luana
Item prox
Ana
novo
Daniel
novo->prox = p->prox;
NULL
primeiro
Celula
ultimo
Carlos
Luana
Item prox
Ana
p->prox = novo;
novo
Daniel
NULL
primeiro
Celula
ultimo
Carlos
Luana
Item prox
Ana
NULL
2
novo
Daniel
ultimo
Item prox
Ana
primeiro
Carlos
Daniel
Luana
NULL
ultimo
Item prox
Ana
Carlos
Daniel
primeiro
Luana
q = p->prox;
q
NULL
p->prox = q->prox;
Item prox
Ana
Carlos
Daniel
Luana
ultimo
primeiro
NULL
free(q);
Celula
Item prox
Ana
Carlos
Daniel
Luana
ultimo
primeiro
NULL
Item prox
Ana
primeiro
Carlos
Daniel
Luana
1
q
ultimo
NULL