Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponteiros
Professores Thiago Silva Miranda Cludio Portes dos Santos
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.
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.
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
Exemplo
x
99
pont
Operador indireto *
O operador indireto (*) um operador que se aplica a uma varivel do tipo ponteiro e resulta no contedo da varivel apontada.
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:
q = &a; p = &x;
10
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.
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