Exercícios Resolvidos de Manipulando ponteiros: ponteiros duplos, aritmética e vetores
Ver TeoriaEnunciado
Seja o seguinte trecho de programa:
Qual será o valor da seguinte expressão:
Passo 1
E aí, pessoal!
Vamos começar a questão analisando o código do enunciado.
Na primeira linha são declaras duas variáveis inteiras e .
Em seguida são declarados dois ponteiros para inteiro e
E fazemos esses ponteiros apontarem para as variáveis:
Assim o conteúdo do ponteiro é o endereço de memória de
Passo 2
A expressão que vamos analisar é Essa é uma expressão aritmética envolvendo ponteiros.
A maior dificuldade está na presença do símbolo asterisco várias vezes ao longo da expressão, em alguns momentos ele representa o operador de desreferência, e em outros momentos representa o operador de multiplicação.
A dica pra não confundir é lembrar que a precedência do operador de desreferência é maior do que a precedência do operador de multiplicação. Então, se o estiver ao lado de um ponteiro ele vai ser considerado como um operador de desreferência.
Vamos dar uma olhada nas regras de precedência.
Analisando a tabela de precedência, primeiro vamos calcular as operações de ponteiro, depois as operações aritméticas
Agora vamos analisar a expressão:
Aqui podemos ver duas operações de ponteiros:
Um ao lado um ponteiro retorna o valor contido no endereço apontado. O ponteiro aponta para , então . Já aponta para , então a operação é igual a :
E agora vamos resolver a multiplicação:
Agora temos essa divisão entre dois inteiros. Lembre-se que no C++ divisão entre dois inteiros ignora a parte decimal, então é igual a , e não ! Assim temos:
Logo o resultado final é: