Exercícios Resolvidos de Manipulando ponteiros: ponteiros duplos, aritmética e vetores

Ver Teoria

Enunciado

Seja o seguinte trecho de programa:

Qual será o valor da seguinte expressão:

3 *   * p   /     ( * q ) + 7

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 i e j .

Em seguida são declarados dois ponteiros para inteiro p e q

E fazemos esses ponteiros apontarem para as variáveis:

Assim o conteúdo do ponteiro p é o endereço de memória de i

Passo 2

A expressão que vamos analisar é 3 * * p /   ( * q ) + 7 .   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:

3 *   * p / ( * q ) + 7

Aqui podemos ver duas operações de ponteiros:

Um * ao lado um ponteiro retorna o valor contido no endereço apontado. O ponteiro p aponta para i = 3 , então * p = 3 . Já q aponta para j = 5 , então a operação * q é igual a 5 :

3 *   3 / ( 5 ) + 7

E agora vamos resolver a multiplicação:

9 / ( 5 ) + 7

Agora temos essa divisão entre dois inteiros. Lembre-se que no C++ divisão entre dois inteiros ignora a parte decimal, então 9 / 5 é igual a 1 , e não 1.5 ! Assim temos:

1 + 7

Logo o resultado final é:

8

Resposta

8