Ponteiro
Departamento de Ciência da Computação
Curso C: Ponteiros e Arrays
Prof. Ricardo Pezzuol Jacobi rjacobi@cic.unb.br Ricardo Jacobi
Linguagem C
Ponteiros
¥ um ponteiro Ž uma vari‡vel que contŽm o endere•o um dado
¥ declara•‹o: Ò*Ó indica que a vari‡vel Ž um ponteiro tipo_dado *nome_ponteiro;
¥ Ex: int x; int *pi;
Linguagem C
/* compilador sabe que pi Ž ponteiro */
/* pi Ž um ponteiro para inteiro */
Ricardo Jacobi
1
Ponteiros
¥ o operador Ò&Ó quando aplicado sobre uma vari‡vel retorna o seu endere•o
¥ Ex: int x = 10, *pi; pi = &x; printf(“&x: %p pi: %p”, &x, pi);
=> &x: 0x03062fd8 pi: 0x03062fd8
Ricardo Jacobi
Linguagem C
Ponteiros
¥ o operador Ò*Ó quando aplicado sobre um ponteiro retorna o dado apontado
¥ Ex: void main () { int *tmp_ptr;
0xABA0
int x, y; x = 10;
0xABA2
tmp_ptr = &x; y = *tmp_ptr; /* (*tmp_ptr) = 10 */
}
Linguagem C
0xABA0
tmp_ptr
10
x
10
y
Ricardo Jacobi
2
Ponteiros
¥ ponteiros s‹o vari‡veis tipadas:
(int *) - (float *) - (char *)
¥ Ex: main() { int *ip, x; float *fp, z; ip = &x; /* fp = &z; /* ip = &z; /* fp = &x; /*
}
OK */
OK */ erro */ erro */
Ricardo Jacobi
Linguagem C
Ponteiros
¥ espa•o ocupado pelas vari‡veis
1 byte
(int *)
1 byte
(float *)
(char *)
Linguagem C
Ricardo Jacobi
3
Utilizando Ponteiros void main() { int x = 10; int *pi; pi = &x; /* *pi == 10 */
(*pi)++; /* *pi == 11 */ printf(“%d”, x);
}
==> 11 ao alterar *pi estamos alterando o conteúdo de x
Ricardo Jacobi
Linguagem C
Utilizando Ponteiros void main() { int x = 10; int *pi, *pj; pi = &x; /* *pi == 10 */ pj = pi; /* *pj == 10 */
(*pi)++; /* (*pi, *pj, x) == 11 */
(*pj)++;
/* (*pi, *pj, x) == 12 */ printf(“%d”, x); /* ==> 12 */
}
Linguagem C
Ricardo Jacobi
4
Prática 1
¥ Pratique a declara•‹o e utiliza•‹o de ponteiros. Ð
Ð
Ð
Ð
defina e inicialize uma vari‡vel