P
ROGRAMAÇÃO DE
C
OMPUTADORES
I
Ponteiros – Parte 2
COMPARAÇÃO ENTRE
PONTEIROS
É possível comparar ponteiros em uma expressão
relacional
>
<
==
>=
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
>=
<=
Os ponteiros podem
ser comparados
entre si
Repare que os if`s e
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
Repare que os if`s e
eles`s estão
organizados em
escada sem a
necessidade de
abertura de chaves
para cada else
EXECUÇÃO
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Já vimos que a definição de uma variável de um tipo
primitivo é diferente de um array
Quando declaramos um array de double por exemplo,
alocamos um espaço contíguo na memória do tamanho de
elementos multiplicado pelo tamanho de bytes ocupado por
aquele tipo
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
A variável notas não é um tipo primitivo e sim um ponteiro
para a primeira posição do array
PONTEIROS E
STRINGS
O mesmo acontece para strings
A variável que representa uma String é um ponteiro para a
primeira posição do array na memória
Pergunta
Será que o código abaixo compila?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
O mesmo acontece para strings
A variável que representa uma String é um ponteiro para a
primeira posição do array na memória
Pergunta
Será que o código abaixo compila?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Exemplo de execução
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Pergunta
Será que o código abaixo compila?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Pergunta
Será que o código abaixo compila?
Compila – mas ocorre erro em tempo de execução
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Pergunta
Será que o código abaixo compila?
Ocorrerá erro de execução
no DevC++ porque a string
armazenada na tabela de
strings é constante quando
ela é declarada como
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
ela é declarada como
ponteiro. Dessa forma, não
podemos modificá-la
PONTEIROS E
STRINGS
Pergunta
Será que o código abaixo compila agora?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
E agora? Funciona?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
E agora? Funciona?
A variável array3 agora
aponta para o endereço
do conteúdo do array2
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
E agora? Funciona?
Lembrando que as linhas de código
marcado não copiam o conteúdo das
strings. Eles apenas fazem com que
array e array3 apontem para o
conteúdo do array2.
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
E agora? Funciona?
Universidade Federal de Ouro Preto Campus João Monlevade
PONTEIROS E
STRINGS
Erros ao manipular strings
Erro 1 – Agora funciona
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
Funciona porque ponteiro p foi inicializado e
está apontando para a primeira posição do
vetor str2.
Erros ao manipular strings
Erro 2
PONTEIROS E
STRINGS
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
ERRO: o ponteiro p não foi inicializado.
PONTEIROS E
STRINGS
Função gets
scanf(...);
getchar();
gets(...);
Atenção: Usar a função gets após o uso da função
scanf causa um erro de lógica. O retorno de carro
usado para terminar a leitura de scanf fica
armazenada no buffer e é lido diretamente pela
função gets. Para evitar esse problema, podemos
chamar a função getchar(); para obter o retorno de
carro, esvaziando o buffer. Exemplo abaixo
puts: método que escreve uma
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
puts: método que escreve uma
String no stdout (stantard output)
no caso o monitor.
USO DO
CONST EM
PONTEIROS
O ponteiro ptr não pode ser modificado
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
O seguinte trecho de código cria um ponteiro constante
para um valor constante
USO DO
CONST EM
PONTEIROS
O valor apontado pelo ponteiro ptr não pode ser
modificado
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Lembrando como funciona o scanf ?
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Primeiro vamos ver a passagem de
parâmetro por valor
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Agora por referência
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS
POR
REFERÊNCIA
Arrays – quando declaramos arrays estamos declarando
ponteiros. Certo?
Então posso receber um array como parâmetro de um
método da forma abaixo?
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
P
ASSAGEM DE
P
ARÂMETROS
POR
REFERÊNCIA
Arrays – quando declaramos arrays estamos declarando
ponteiros. Certo?
Então posso receber um array como parâmetro de um
método da forma abaixo?
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Exemplo 1
Método que recebe uma string e exibe seus elementos com
um espaço entre eles
Duas formas de recebimento de parâmetros
Universidade Federal de Ouro Preto Campus João Monlevade
Exemplo
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Exemplo 2
Criação de funções para o cálculo do tamanho de uma string
Modificação na condição de parada do while
Universidade Federal de Ouro Preto Campus João Monlevade
Universidade Federal de Ouro Preto Campus João Monlevade
Instituto de Ciências Exatas e Aplicadas
Critério de parada! Importante: Funciona
para o array de caracteres apenas.
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
E se quisermos passar como referência um array de
inteiros?
Em geral passamos como parâmetro além do ponteiro a
quantidade de elementos presentes no array.
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Universidade Federal de Ouro Preto Campus João Monlevade
P
ASSAGEM DE
P
ARÂMETROS POR
REFERÊNCIA
Universidade Federal de Ouro Preto Campus João Monlevade
REFERÊNCIAS
Notas de Aula do Professor Romildo Malaquias
(DECOM/UFOP)
Notas de Aula do Professor Giori Ambrósio
C Completo e Total - 3ª edição
Universidade Federal de Ouro Preto Campus João Monlevade