Você está na página 1de 18

Centro Universitrio do Leste de Minas Gerais UnilesteMG Sistemas de Informao Algoritmos e Estruturas de Dados II

Ponteiros
Professores Thiago Silva Miranda Cludio Portes dos Santos

Material gentilmente cedido pela prof. Dbora Pereira Coura.

O que so Ponteiros?
Um ponteiro um endereo de memria. Seu valor indica onde uma varivel est armazenada, no o que est armazenado. Um ponteiro proporciona um modo de acesso a uma varivel sem referenci-la diretamente.

Sistemas de Informao - UnilesteMG

O que so Ponteiros?
Um ponteiro varivel armazena um endereo de memria. Este endereo a localizao de uma outra varivel. Dizemos que uma varivel aponta para outra varivel quando a primeira contm o endereo da segunda.

Sistemas de Informao - UnilesteMG

Exemplo
void main( ) { clrscr(); int x=99, *pont; pont = &x; cout<<" \n X vale "<<x; cout<<" \n o endereo de X e "<< &x; cout<<" \n Pont aponta para o endereo "<<pont; getch( ); //system(pause); }
Sistemas de Informao - UnilesteMG

Exemplo
Resultado da execuo:
X vale 99 O endereo de X 0x8fa8fff4 Pont aponta para o endereo 0x8fa8fff4

Sistemas de Informao - UnilesteMG

Exemplo

x
99

pont

Sistemas de Informao - UnilesteMG

O operador de endereos &


Para conhecer o endereo ocupado por uma varivel usamos o operador de endereos (&). Este operador um operador unrio e seu operando deve ser o nome de uma varivel, e o resultado o seu endereo.

Sistemas de Informao - UnilesteMG

Operador indireto *
O operador indireto (*) um operador que se aplica a uma varivel do tipo ponteiro e resulta no contedo da varivel apontada.

Sistemas de Informao - UnilesteMG

Aritmtica de Ponteiros
So vlidas as operaes de soma e subtrao, sendo que seu resultado depende do tipo de varivel apontada pelo ponteiro.
int *p, x; char *q, a;
Se: E ainda que:

a tem endereo 100 x tem endereo 101/102


Ento:
p++ q++ p apontar para o endereo 103 q apontar para o endereo 101
9

q = &a; p = &x;

Sistemas de Informao - UnilesteMG

Analise o programa abaixo e simule a sua execuo


void main( ) { int i, k, *pi, *pk; i = 2; k = 0; cout<<\n Qual ser o valor de k?; pk = &k; pi = &i; *pk = i; cout<<\n para *pk = i, temos k = << k; k = *pi + 2; cout<<\n para k = *pi, temos k = << k; system(pause); }
Sistemas de Informao - UnilesteMG

10

Analise o programa abaixo e simule a sua execuo


void main( ) { int x, y, *px, *py; cout<<\n Digite um valor: ; cin>>x; px = &x; y = *px; cout<<\nDigitou x = << x << e y = << y; *px = 8; cout<<\n O valor de x passou para: << x; cout<<\n O valor de y passou para: << y; system(pause); }
Sistemas de Informao - UnilesteMG

11

Alocao Dinmica
Varivel P declarada como um ponteiro para um tipo de objeto especfico. Pode-se criar dinamicamente um objeto desse tipo especfico e atribuir o seu endereo a P. malloc(size) aloca dinamicamente uma parte da memria, de tamanho size, e retorna um ponteiro para um item de tipo genrico void*.
Sistemas de Informao - UnilesteMG

12

Alocao Dinmica
//Exemplo de cdigo: int *pi; pi = (int *) malloc(sizeof (int)); Varivel Dinmica: criada dinamicamente, ex: *pi sizeof: retorna o tamanho, em bytes, de seu operando. malloc(sizeof(int)): aloca na memria, um espao (bloco de bytes) de armazenamento para um inteiro.
Sistemas de Informao - UnilesteMG

13

Alocao Dinmica
malloc retorna um ponteiro (endereo) para o armazenamento que ele aloca. Esse ponteiro aponta para o primeiro byte desse armazenamento e o seu tipo void *. O (int *) fora esse ponteiro a apontar para um inteiro.

Sistemas de Informao - UnilesteMG

14

Exemplo
void main() { int *p, *q, x; p = (int*) malloc(sizeof(int)); *p = 3; q = p; cout<<\n p = <<*p<< e q = <<*q; x = 7; *q = x; cout<<\n p = <<*p<< e q = <<*q; p = (int*) malloc(sizeof(int)); *p = 5; cout<<\n p = <<*p<< e q = <<*q; system(pause); }
Sistemas de Informao - UnilesteMG

15

Alocao Dinmica
A funo free usada em C para liberar o armazenamento de uma varivel alocada dinamicamente. free(p) libera a poro de memria alocada por malloc. Com isso, invalida quaisquer referncias futuras a *p. Torna o armazenamento ocupado por *p disponvel para reutilizao, se necessrio.
Sistemas de Informao - UnilesteMG

16

Alocao Dinmica
p = (int*) malloc(sizeof(int)); *p = 5; q = (int*) malloc (sizeof (int)); *q = 8; free(p); p = q; q = (int*) malloc(sizeof(int)); *q = 6; cout<<\n p = <<*p<< e q = <<*q;
Sistemas de Informao - UnilesteMG

17

Alocao Dinmica
NULL no referencia um local de armazenamento, mas indica um ponteiro que no aponta para nada. O valor NULL pode ser atribudo a qualquer varivel ponteiro p. Com isso, uma referncia a *p ser invlida, j que no possui nenhum endereo associado.
Sistemas de Informao - UnilesteMG

18

Você também pode gostar