Assuma que as seguintes variáveis foram declaradas e inicializadas como no trecho de código abaixo:
int *px, *py, x = 50, y = 123;
px = &x;
py = &y;
Escreva comandos em C para exibir:
Referência direta:
a. O valor de x;
b. O endereço de
;
c. O valor de y ;
d. O endereço de
;
Referência indireta:
a. O valor apontado por px;
b. O endereço apontado por px;
c. O valor apontado por py;
d. O endereço apontado por py;
Aritmética de ponteiros:
a. O endereço seguinte ao apontado por px;
b. O conteúdo apontado por px, acrescido de 1;
c. O conteúdo do endereço seguinte ao apontado por py;
int *px, *py, x = 50, y = 123;
px = &x;
py = &y;
Referência direta:
a. O valor de x;
b. O endereço de
c. O valor de y ;
d. O endereço de
a. O valor apontado por px;
b. O endereço apontado por px;
c. O valor apontado por py;
d. O endereço apontado por py;
a. O endereço seguinte ao apontado por px;
b. O conteúdo apontado por px, acrescido de 1;
c. O conteúdo do endereço seguinte ao apontado por py;
Passo 1
Vamos relembrar o que temos: duas variáveis inteiras x e y inicializadas com 50 e 123, e dois ponteiros px e py apontando para elas. Precisamos imprimir, usando printf, valores e endereços de forma direta (variável), indireta (através do ponteiro) e aplicar aritmética em ponteiros.
Passo 2
Para referência direta, bastar usar a variável ou seu endereço nos parâmetros de printf. Usamos %d para valores inteiros e %p para endereços.
Passo 3
Para referência indireta, acessamos o conteúdo com *px ou *py e os próprios ponteiros px e py guardam os endereços.
Passo 4
Para aritmética de ponteiros, somamos 1 ao ponteiro ou ao conteúdo e usamos o resultado em printf, lembrando que *(py+1) acessa o conteúdo do próximo endereço de py.
Resposta
// Referência direta:
printf(“a. Valor de x: %d\n”, x);
printf(“b. Endereço de x: %p\n”, (void*)&x);
printf(“c. Valor de y: %d\n”, y);
printf(“d. Endereço de y: %p\n”, (void*)&y);
printf(“a. Valor de x: %d\n”, x);
printf(“b. Endereço de x: %p\n”, (void*)&x);
printf(“c. Valor de y: %d\n”, y);
printf(“d. Endereço de y: %p\n”, (void*)&y);
// Referência indireta:
printf(“a. Valor apontado por px: %d\n”, px);
printf(“b. Endereço apontado por px: %p\n”, (void)px);
printf(“c. Valor apontado por py: %d\n”, py);
printf(“d. Endereço apontado por py: %p\n”, (void)py);
printf(“a. Valor apontado por px: %d\n”, px);
printf(“b. Endereço apontado por px: %p\n”, (void)px);
printf(“c. Valor apontado por py: %d\n”, py);
printf(“d. Endereço apontado por py: %p\n”, (void)py);
// Aritmética de ponteiros:
printf(“a. Endereço seguinte ao apontado por px: %p\n”, (void*)(px + 1));
printf(“b. Conteúdo apontado por px acrescido de 1: %d\n”, *px + 1);
printf(“c. Conteúdo do endereço seguinte ao apontado por py: %d\n”, *(py + 1));
printf(“a. Endereço seguinte ao apontado por px: %p\n”, (void*)(px + 1));
printf(“b. Conteúdo apontado por px acrescido de 1: %d\n”, *px + 1);
printf(“c. Conteúdo do endereço seguinte ao apontado por py: %d\n”, *(py + 1));