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)
c)