Engenheiro
ESTRUTURA DE DADOS ESTÁTICA, COMPOSTA E DINÂMICA
ESTRUTURAS DE DINÂMICAS
2
Apontadores ou ponteiros
Ponteiros
3
Um ponteiro representa um endereço de memória, permitindo aceder a outras variáveis ou buffers explicitamente reservados
Se uma variável contém o endereço de outra, diz-se então que a primeira aponta para a segunda.
Ponteiros
4
Sintaxe tipo *nomeDoPonteiro;
Ponteiro
Exemplos: int *a; char *b; float *c; double *d;
Memória
a
80
b
‘?’
c
12.23
d
10.0
Ponteiros
5
Os ponteiros precisam de ser inicializados
Para isto basta usarmos o operador & que retorna um endereço
Exemplo:
int a = 10, *p;
p = &a; // p aponta para o endereço de a
Ponteiros
6
O operador * é usado para termos acesso ao valor do endereço de memória para o qual um ponteiro aponta Exemplo:
int a, b = 10, *p; p = &b; // p aponta para o endereço de b a = *p; // a = 10
*p = 15; // b = 15, mas a ainda é 10
Ponteiros
7
int* ptr; ptr é um ponteiro para uma variável inteira
ptr
*ptr
é o ponteiro (endereço) em si
valor apontado por ptr
&var representa o endereço da variável var
NULL ponteiro nulo (não aponta para nada)
Ponteiros - Exemplo Simples
8
// Um inteiro int idade = 20;
idade (0x5490)
// Um ponteiro para um inteiro int* ptrIdade = NULL;
ptrIdade (0x6000)
// Uma atribuição... ptrIdade = &idade;
// Acesso à idade original... printf(“%d”, *ptrIdade);
// Acesso à idade original...
*ptrIdade = 30;
“30”
“20”
0 ptrIdade (0x6000)
0x5490
Ponteiros
9
Situação perigosa
Ponteiros
10
Desafio
Indique
o output de excerto de código apresentado à direita. 10
20
60
60
30
60
Aritmética de Ponteiros
11
Igualdade p1 = p2 // p1 aponta para o mesmo endereço de p2
*p1 = *p2 // copia o conteúdo