Suponha a seguinte declaração:

int x = 2, *px, *py, y = 3;

que corresponde ao seguinte esquema de memória:

Suponha que a escrita de inteiros e ponteiros pode ser feita através da função printf usando o formato %d.

a) Escreva o código necessário para colocar px apontando para x e py apontando para y.

b) Depois de executado o item (a), qual a saída das seguintes instruções?

printf(“%d %d\n”, x, y);

printf(“%d %d\n”, *px, *py);

printf(“%d %d\n”, &px, &py);

c) Caso seja feito px = py, qual a saída de

printf(“%d %d %d %d %d %d %d %d”, x, &x, px, *px, y, &y, py, *px) ?

Passo 1

Fala aí! Pra começar essa aqui é bem tranquilo né? Só precisamos lembrar dos operadores usados para ponteiros. Vamos utilizar o operador &, que significa “endereço de”, assim, ao escrevermos px = &x e py = &y, estamos fazendo px apontar para x e py apontar para y.

Passo 2

Beleza, seguindo em frente, vamos analisar o esquema de memória para responder as próximas perguntas. Repare que, para o caso da instrução

obtemos a saída pela simples substituição dos valores de x e y. Logo, obtemos 2 e 3.

Já para os próximos casos, vamos analisar os operadores de ponteiros * e &.

Aqui, temos o operador *, que significa “apontado por”. O resultado disso é exatamente igual ao anterior, pois px e py apontam para x e para y, respectivamente.

Por último, temos novamente o operador “endereço de”:

Se verificarmos no esquema de memória, vamos constatar que px e py estão armazenados nos endereços 101 e 102, respectivamente. Portanto, estes são os valores retornados.

Passo 3

Quando fazemos px = py, devemos nos lembrar que as atribuições em C são feitas da direita para a esquerda, ou seja, estamos passando o valor de py para px, e não o contrário. Portanto, para obtermos a saída da expressão

basta substituirmos as variáveis prestando atenção nos operadores de ponteiros. Por exemplo, com x, nos referimos ao valor definido à variável x, por &x, nos referimos ao endereço que está armazenada a variável x, por *px, nos referimos ao valor apontado por px (que agora é o mesmo que aquele apontado por py), e assim por diante.

Resposta

a)px = &x;

py = &y;

b) 2   3

2   3

101   102

c) 2   100   103   3   3   103   103   3