Академический Документы
Профессиональный Документы
Культура Документы
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 3
Ponteiros - Atribuições
Endereço
◦ Para se atribuir um endereço à um ponteiro
usa-se o operador ‘&’, antes da variável
apontadora. Endereço 660, na MEM
a 33
int a = 33, *ptr;
ptr
ptr = &a;
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 4
Ponteiros - Conteúdo
Conteúdo Apontado
◦ O valor contido no endereço de memória
apontado por um ponteiro pode ser acedido
usando o operador * (conteúdo)
◦ Neste caso coloca-se o operador antes do
nome do apontador, como no exemplo
abaixo: Endereço 660, na MEM
a 33
int y, a = 33, *ptr;
ptr
ptr = &a;
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 7
Ponteiros – Operador Incremento
Os ponteiros são, em geral, usados para representar
uma sequência de dados, sendo cada um localizado no
seu endereço de memória.
Pode-se assim usando dos ponteiros aceder a todos
esses dados, desde que se conheça o primeiro
Essa operação é feita usando o operador incremento.
Nestes casos os incrementos são sempre múltiplos,
em Bytes dos tipos de dados que representam.
Por exemplo:
◦ Ponteiros para int o incremento é de 2Bytes cada
◦ Ponteiros para char o incremento é de 1Byte cada
◦ Ponteiros para float o incremento é de 4Bytes cada
◦ Etc.
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 8
Ponteiros – Operador Incremento
1º Caso
Se pt é um ponteiro e y um int, então a operação
pt++
◦ Incrementa o endereço de pt para x Bytes,
pt + y
◦ Incrementa o endereço apontado por pt de y*x Bytes
Em ambos casos x é o número de bytes do tipo
apontado por pt.
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 9
Ponteiros – Operador Incremento
2º Caso
Se pt é um ponteiro e y um int, então a operação
(*pt)++
◦ Incrementa o conteúdo apontado por pt de 1,
(*pt) + y
◦ Incrementa o conteúdo apontado por pt de y
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 10
Ponteiros – Operador Incremento
3º Caso
Se pt é um ponteiro e y um int, então a operação
*pt++
◦ Do facto do operador ++ ter maior precedência do que o
*, esta operação resulta em:
◦ *(pt++)
◦ Isto é retorna o valor actual de pt
◦ De seguida incrementa o endereço de pt de 1 unidade
x=*(pt+y)
Atribui a x o conteúdo do endereço de pt
incrementado de y
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 11
Ponteiros vs Vectores
Vectores são caso particular de ponteiros,
disto resultam algumas relações
Se tivermos a seguinte declaração:
tipo1 vect[ ], *ptr
Então são válidas as expressões:
ptr = vect = &vect[0];
ptr[i] = *(ptr+i) = *(vect+i)
UniMETRO/FATEC/LCC-BIF
ProgramaçãoII/ M.T.Ditutala 12