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 e inicializadas com o valor 0, além de dois ponteiros para inteiro e .
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 recebendo o valor 4 e a variável 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 ao ponteiro (linha 09) e em seguida a atribuição do endereço armazenado pelo ponteiro ao ponteiro (linha 10). Sendo assim, podemos concluir que temos e apontando para a mesma variável, que é .
Passo 4
Na linha 11, nós temos uma atribuição da soma entre o valor armazenado pela variável apontada por e 3 a variável apontada por . Reduzindo um pouco isso, podemos dizer que a variável (variável apontada por ) está recebendo a soma entre o seu valor atual (já que o ponteiro também aponta para ) e 3.
Dessa forma, podemos concluir que a variável 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 a . Como a variável apontada por é e armazena o valor 7, podemos concluir que 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 seguida da atribuição do endereço de ao ponteiro . Como aponta para que armazena o valor 7, temos agora armazenando o valor 8 e agora apontando para a variável .
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 aponta para a variável e para a variável ) seguida de uma quebra de linha e da impressão dos valores 8 e 21 que são os valores armazenados pelas variáveis e respectivamente.