Informática, perguntado por ferreiragah, 9 meses atrás

A manipulação de ponteiros, apesar de extremamente útil para diversas situações, requer um cuidado especial para que não sejam acessadas posições indevidas de memória. Para essa questão, suponha o seguinte código:



#include



int main()

{

int a, b, *p;

b = 0;

p = &b;

a = *p;

a = 10;

(*p)++;

--a;

(*p) += a;

printf("a = %d\tb = %d\tp = %d",a,b,*p);

return 0;

}

Assinale a alternativa que contém os valores de “ a ”, “ b ” e do conteúdo de “ p ”, respectivamente.
( ) 9, 10, 10.
( ) 10, 10, 10.
( ) 10, 9, 10.
( ) 9, 9, 10.
( ) 9, 9, 9.


ferreiragah: Alternativa 9, 10, 10.

Soluções para a tarefa

Respondido por luizhenrique9967
5

Resposta:

a = 9, b = 10, *p = 10, isso porque *p recebe o mesmo endereço de memória de b, então, qualquer alteração que a gente fizer na variável b, automaticamente altera a variável p, compreende? Pois ambas possuem endereços iguais, isso acontece vice versa, se alterarmos a variável p, acabamos alterando também a variável b, pois o código diz que *p = &b, ou seja, esse "&" é o identificador de endereço de memória, logo ambas acabam tendo o mesmo endereço.

Explicação:

#include <stdio.h>

int main()

{

int a, b, *p;

b = 0;

p = &b;  // -> o ponteiro "p", recebe o endereço de b, ou seja, qualquer valor que b receber, p também receberá, pois ambas possuem agora o mesmo endereço.

a = *p; //  -> a variável "a" está recebendo o valor de p, como p = b e vice versa e b = 0, então acaba ficando a = 0.

a = 10;  // -> a variável "a" recebe o valor 10, então o valor 0 que ela tinha não existe mais, agora a = 10.

(*p)++;  // -> a variável(ponteiro) está sendo incrementado em 1, esse "++" é a mesma coisa de *p = *p + 1. Se antes o valor de *p = 0 e foi incrementado 1, então *p = 1.

--a;  //-> O valor de "a" é 10, mas está sendo decrementado 1 (--a), então, a = 9.

(*p) += a;  //-> como *p = 1, ele está recebendo sendo somado com "a", (*p = *p + a), ou seja, se a = 9 e *p = 1, então *p + a = 10. Como *p  tem o mesmo endereço de memória da variável b, então b acaba se tornando 10 também.

printf("a = %d\tb = %d\tp = %d",a,b,*p); //-> portanto, a = 9, b = 10 e *p = 10.

return 0;

}

Perguntas interessantes