Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
III Linguagem C
Trabalhando com ponteiros
Roteiro
linguagem
Trecho de memria
byte 1
byte 2
Byte 3
byte 4
byte 5
byte 6
byte 7
byte 8
byte 9
byte 10
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
char c;
int ni;
float nf;
char ch[3];
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
char c;
Trecho de memria
A1h
A
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
Ponteiros
linguagem
char c = A;
char* p= &c;
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
A
A1h
Variveis comuns
armazenam dados
Ponteiros armazenam
endereos (neste caso, o
endereo da varivel c)
Declarando ponteiros
linguagem
char* ponteiro;
O smbolo de asterisco que vai indicar ao c que voc quer um
Declarando ponteiros
linguagem
do tipo int, deve criar um ponteiro para int (que int*). Se for char,
um ponteiro para char (char*).
char* pc;
No exemplo acima, o C vai saber que voc est criando uma varivel
No exemplo acima, o C vai saber que voc est criando uma varivel
Declarando ponteiros
linguagem
Alguns exemplos:
Tipo
char* pontLetra;
int* pontNumero;
float* pontNum;
Utilizando ponteiros
linguagem
outras variveis:
char c = A;
char* ponteiro = &c;
Note que o operador & (que retorna o endereo de uma varivel) foi
utilizado!
OBS: A princpio, voc no pode atribuir endereos de variveis que no sejam do mesmo
tipo do ponteiro: int a = 20;
char* pont = &a; // Errado, pois a no do tipo char!
Utilizando ponteiros
linguagem
Se voc mandar imprimir uma varivel do tipo ponteiro, ela vai mostrar o
char c = A;
// coloca o valor A na varivel c
char* ponteiro = &c;
// coloca o endereo da varivel c no ponteiro
printf(%d, ponteiro); // imprime o contedo do ponteiro, que o
// endereo da varivel c
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A
A1h
Utilizando ponteiros
linguagem
Voc pode utilizar o ponteiro para mostrar ou manipular o contedo do endereo (da varivel)
char c = A;
// coloca o valor A na varivel c
char* ponteiro = &c;
// coloca o endereo da varivel c no ponteiro
printf(%d, *ponteiro); // imprime o contedo do endereo para o qual
// o ponteiro aponta ( que A )
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A
A1h
Utilizando ponteiros
linguagem
Ponteiros tambm tm endereo. Logo, voc tambm pode imprimir o seu endereo ou
char c = A;
// coloca o valor A na varivel c
char* ponteiro = &c;
// coloca o endereo da varivel c no ponteiro
printf(%d, &ponteiro); // imprime o endereo do ponteiro (A2h)
char** p2 = &ponteiro; // cria um ponteiro de ponteiro, e coloca o
// endereo do ponteiro l
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A
A1h
Aritmtica de ponteiros
linguagem Assim como nas variveis comuns, voc pode
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
A2h
A3h
p
c[0]
c[1]
c[2]
c[3]
c[4]
Aritmtica de ponteiros
linguagem
Deste modo, voc pode fazer um programa que preenche o vetor sem ter que utilizar a varivel do vetor (varivel c):
void main(void) {
char* p;
char c[5];
p = c; // o mesmo que p = &c[0]
for(int cont=0;cont<5;cont++) {
*p = cont+1; // coloca cont+1 no local apontado por p
p++; // passa para o endereo do prximo elemento
}
}
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
A6h
1
2
3
4
5
p
c[0]
c[1]
c[2]
c[3]
c[4]
Aritmtica de ponteiros
linguagem
Trecho de memria
A1h
A2h
A3h
A4h
A5h
A6h
A7h
A8h
A9h
AAh
ABh
AAh
c[0]
c[1]
c[2]
c[3]
c[4]
Resumo
linguagem
Operadores de ponteiros:
Operador
Uso
Exemplo
Declarao de ponteiro
char* p;
&
Retorna o endereo
p = &variavel;
Utilizao de contedo
char c = *p;
++
Incrementar o endereo
p++;
--
Decrementar o endereo
(aponta para o elemento anterior)
p--;
memria do computador;
Descobriu como declarar ponteiros para armazenar
o endereo de outras variveis;
Aprendeu como um ponteiro pode ser utilizado
para manipular diretamente o contedo da memria
do computador (e, conseqentemente, o contedo
de outras variveis).
Para maiores informaes, visite a pgina da disciplina:
http://br.geocities.com/lwives