Escolar Documentos
Profissional Documentos
Cultura Documentos
Fup 16 Ponteiros
Fup 16 Ponteiros
Ponteiros
Prof. Arthur de Castro Callado
Universidade Federal do Cear - 2014.1
Varivel
Regio da memria que tem um tipo definido e
cujo valor pode ser alterado e/ou acessado
durante a execuo de um programa
Ponteiro
Varivel cujo valor representa o endereo de
outra varivel na memria
Aponta para uma regio da memria
Normalmente (por exemplo, em C), tem um
tipo definido, isto , aponta para uma varivel de
um tipo especfico
Declarao de Ponteiros (C)
<tipo> *<nome>;
Por exemplo, um ponteiro para varivel com a
idade de uma pessoa:
int *p_idade;
Uso de Ponteiros (C)
Ponteiros devem ser inicializados
Receber um endereo de memria para o
qual apontar
Ponteiros devem apontar para variveis ou
regies da memria previamente alocadas e que
continuaro alocadas enquanto o ponteiro for
necessrio
Aplicaes de Ponteiros
Alocao dinmica de memria
Com vetores, pode-se alocar somente a
quantidade de memria que necessria
Evita desperdcio e minimiza erros de acesso a
valores inexistentes
Manipulao de vetores e estruturas em
memria
Permite a criao de algoritmos que
percorrem uma estrutura de dados ou um
vetor (incluindo strings)
Aplicaes de Ponteiros
Passagem de parmetros por referncia
Permite chamar uma funo com um
parmetro altervel (que permanece alterado
aps o trmino da funo)
Retorno mltiplo de parmetros
Permite a uma funo retornar mais de um
valor
Ponteiro para funo: permite o uso de funes
de callback
Funo que chamada por um evento
Exemplos de Ponteiros (C)
#include <iostream>
using namespace std;
int main(void) {
float x, y; /* x e y sao variaveis reais */
float *p1, *p2; /* p1 e p2 sao ponteiros para variaveis reais,
*p1 e *p2 sao reais */
x = 2.5;
y = 0.8;
p1 = &x; /* p1 aponta para x */
y = *p1; /* y agora vale 2.5 */
*p1 = 1.0; /* x agora vale 1.0 */
*p1 = *p1 + 5.0; /* x agora vale 6.0 */
p2 = p1; /* p2 tambem aponta para x */
return(0);}
Parmetro Referenciado (C)
#include <iostream>
using namespace std;
int idoso(int idade, int *p_idoso) {
if(idade>=65) *p_idoso = 1;
else *p_idoso = 0;
return(*p_idoso);}
int main(void) {
int idade, e_idoso;
cout << digite a idade: << endl; cin >> idade;
idoso(idade, &e_idoso);
if(e_idoso) cout << Voce e idoso << endl;
else cout << Voce nao e idoso << endl;
return(0);}
Exerccio de Ponteiro (C)
Usando ponteiros com passagem por referncia,
faa uma nica funo para receber dois valores e
retornar a soma, o produto e a diferena desses
valores