MC102 - Algoritmos e Programação de Computadores 14ª Aula - Ponteiros Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005 Roteiro Comentários Laboratório 06 Laboratório 07 Relembrando mais uma vez... Ponteiros O que são? Representação na memória Representação na linguagem C Por quê? Exemplos 27/04/2005 2 Relembrando mais uma vez... Uma variável está associada a uma posição de memória e qualquer referência a ela significa um acesso ao conteúdo de um pedaço de memória cujo tamanho depende de seu tipo Nome 27/04/2005 Endereço ou Referência Conteúdo 3 Ponteiros – O que são? Um ponteiro, ou apontador, é uma variável que contém o endereço de outra variável. Nome Endereço ou Referência Conteúdo O conteúdo é um endereço de memória 27/04/2005 4 Uma representação da memória letra (0x240ff5f) p (0x240ff58) ‘a’ 0x240ff5f . . . 27/04/2005 A variável letra é do tipo char A variável p é um apontador Neste caso, dizemos que p “aponta” para letra, sendo possível ler e alterar o conteúdo de letra via p. 5 Declaração: tipo *identificador; Representação na linguagem C #include <stdio.h> int main () { char letra = 'a'; char *p; /* Declaração de um ponteiro: neste caso, informa que p é um ponteiro que deve apontar para uma variável do tipo caracter (seu conteúdo ainda é desconhecido) */ p = &letra; /* Atribuição de um endereço a um ponteiro: neste caso, p recebe o endereço da variável letra, ou seja, p passa a apontar para a variável letra */ printf (“%c\t”, *p); /* Exibe o conteúdo da variável letra */ *p = ‘b’; /* Altera o conteúdo da variável letra */ printf (“%c\n”, letra); return 0; } 27/04/2005 6 No exemplo anterior: char *p; declara que p é um apontador para uma variável do tipo char *p Na declaração, informa que a variável p é um apontador No uso, possibilita acessar a posição de memória (o endereço) da variável que p aponta, ou seja, pode-se ler e alterar o conteúdo da variável que p aponta &letra Representa o endereço da variável letra 27/04/2005 7 Se quisermos indicar que um ponteiro não aponta para uma variável, podemos atribuir a ele um “valor nulo”: p = NULL; Essa informação pode ser útil em expressões condicionais: If (p == NULL) { } else { } 27/04/2005 8 Ponteiros – Por quê? Eventualmente, torna-se necessário que uma função dê acesso ao seu espaço de memória a outra função. Exemplo: scanf (“%c”, &letra); O espaço de memória utilizado por um programa pode ser reservado (e liberado) dinamicamente, via ponteiros, diferentemente do que temos feito até o momento. 27/04/2005 9 Em outras palavras... 1. Provêem uma forma de comunicação entre funções 2. Podem auxiliar na construção de programas que utilizam memória de forma ponderada, conforme sua necessidade de processamento 3. Ainda... A implementação de alguns algoritmos computacionais são mais eficientes com o uso de ponteiros 27/04/2005 10 Exemplos (na lousa) Outros exemplos estão disponíveis no Ensino Aberto 27/04/2005 11