MC102 - Algoritmos e Programação de Computadores 14ª Aula - Ponteiros Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005
27/04/20052 Roteiro zComentários yLaboratório 06 yLaboratório 07 zRelembrando mais uma vez... zPonteiros yO que são? yRepresentação na memória yRepresentação na linguagem C yPor quê? yExemplos
27/04/20053 Relembrando mais uma vez... zUma 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 Endereço ou Referência Nome Conteúdo
27/04/20054 Ponteiros – O que são? zUm ponteiro, ou apontador, é uma variável que contém o endereço de outra variável. Endereço ou Referência Nome Conteúdo O conteúdo é um endereço de memória
27/04/20055 Uma representação da memória ‘a’ 0x240ff5f letra (0x240ff5f) p (0x240ff58) 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.
27/04/20056 Representação na linguagem C #include 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; } Declaração: tipo *identificador;
27/04/20057 zNo exemplo anterior: ychar *p; xdeclara que p é um apontador para uma variável do tipo char y*p xNa declaração, informa que a variável p é um apontador xNo 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 y&letra xRepresenta o endereço da variável letra
27/04/20058 zSe quisermos indicar que um ponteiro não aponta para uma variável, podemos atribuir a ele um “valor nulo”: p = NULL; zEssa informação pode ser útil em expressões condicionais: If (p == NULL) { } else { }
27/04/20059 Ponteiros – Por quê? zEventualmente, 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); zO 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/ 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... yA implementação de alguns algoritmos computacionais são mais eficientes com o uso de ponteiros
27/04/ Exemplos z(na lousa) zOutros exemplos estão disponíveis no Ensino Aberto