Exercícios Resolvidos de Manipulando ponteiros

Ver Teoria

Enunciado

Observe o seguinte programa:

Qual será a saída impressa no final da execução desse código?

Passo 1

Vamos começar do começo, na linha 05 do programa nós conseguimos identificar a declaração de duas variáveis inteiras a e b inicializadas com o valor 0, além de dois ponteiros para inteiro p 1 e p 2 .

Passo 2

Sabendo quais elementos serão manipulados pelo programa podemos agora analisar os comandos que se iniciam na linha 07.

Começando pelas atribuições, nós podemos ver a variável a recebendo o valor 4 e a variável b o valor 3 (linhas 07 e 08).

Passo 3

Em relação aos ponteiros, nós conseguimos identificar a atribuição do endereço da variável a ao ponteiro p 1 (linha 09) e em seguida a atribuição do endereço armazenado pelo ponteiro p 1 ao ponteiro p 2 (linha 10). Sendo assim, podemos concluir que temos p 1 e p 2 apontando para a mesma variável, que é a .

Passo 4

Na linha 11, nós temos uma atribuição da soma entre o valor armazenado pela variável apontada por p 1 e 3 a variável apontada por p 2 . Reduzindo um pouco isso, podemos dizer que a variável a (variável apontada por p 2 ) está recebendo a soma entre o seu valor atual (já que o ponteiro p 1 também aponta para a ) e 3.

Dessa forma, podemos concluir que a variável a agora armazena o valor 7.

Passo 5

Já na linha seguinte (linha 12), temos a atribuição de 3 vezes o valor da variável apontada por p 1 a b . Como a variável apontada por p 1 é a e armazena o valor 7, podemos concluir que b passa agora a armazenar o valor 21.

Passo 6

Em seguida (linha 13) temos o incremento de uma unidade sendo feito na variável apontada por p 2 seguida da atribuição do endereço de b ao ponteiro p 1 . Como p 2 aponta para a que armazena o valor 7, temos agora a armazenando o valor 8 e p 1 agora apontando para a variável b .

Resposta

Depois de toda essa análise podemos afirmar que a impressão realizada na linha 16 será dos valores 21 e 8 (já que p 1 aponta para a variável b e p 2 para a variável a ) seguida de uma quebra de linha e da impressão dos valores 8 e 21 que são os valores armazenados pelas variáveis a e b respectivamente.