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

Ver Teoria

Enunciado

Observe a seguinte expressão de aritmética de ponteiros. Qual o resultado?

Passo 1

Vamos lá pessoal.

Basicamente, a questão quer que a gente analise a expressão da linha 10. Essa é uma expressão envolvendo ponteiros, ponteiros duplos e vetores. Então vamos tomar cuidado para não cometer nenhum erro.

Antes de começar, vamos dar uma revisada nas regras de precedência:

Note que os operadores de ponteiro * e & tem precedência bem alta. E vamos tomar cuidado para não confundir um operador de ponteiro com uma multiplicação.

Passo 2

Agora vamos pensar em pra onde cada ponteiro está apontando.

Sempre que a gente encontrar o vetor sem os colchetes v e c podemos considera-lo como um ponteiro para v e c [ 0 ] .

p é um ponteiro para a primeira posição do vetor. Ou seja, o ponteiro p aponta para v e c [ 0 ] .

Por fim, o ponteiro p p é um ponteiro duplo que aponta para o ponteiro p .

Passo 3

Com tudo estabelecido, vamos resolver a expressão. Pra começar vamos escrever a expressão e analisa-la.

* p + +   +   2   +   15   +   * v e c   +   1   +   * * p p   +   2

Vamos olhar primeiro pras expressões dentro dos parêntesis destacados abaixo:

Tanto p quanto v e c são ponteiros para a primeira posição do vetor. Na expressão laranja o ponteiro é incrementado com o operador + + passa a apontar para a segunda posição do vetor, em seguida é somado + 2 , o resultado aponta para a quarta posição do vetor. A expressão p + + + 2 é uma referência à v [ 3 ] . O operador * acessa o valor contido neste endereço que é igual à 12

Na expressão em vermelho, v e c é um ponteiro para a primeira posição do vetor. Ao adicionar + 1 somos enviados para a próxima posição. v e c   +   1 é uma referência a segunda posição do vetor. O operador * acessa o valor contido neste endereço que é igual à 6

Por sua vez, p p é um ponteiro duplo que aponta para p , que aponta para v [ 0 ] . Quando utilizamos dois operadores de desreferência em p p nós recebemos o valor contido em v 0 como resposta. Ou seja: * * p p ⇒ 3 , então a expressão em azul é:

Assim, a expressão é reduzida à:

Efetuando as somas temos:

38

Passo 4

Para garantir que nossa resposta está correta vamos executar o programa:

O que mostra que chegamos na resposta correta.

Resposta

38