Considere que a memória de um computador armazena os seguintes valores:
Endereço Conteúdo
0B2 180
0B3 1.79
0B4 178
Considere que as variáveis inteiras a e b correspondem aos endereços 0B2 e 0B4, respectivamente, e que a variável de ponto flutuante |c|c| hline Endereço & Conteúdo hline hline 0B2 & 180 hline 0B3 & 1.79 hline 0B4 & 178 hline corresponde ao endereço 0B3. Identificar os valores a serem mostrados pelas seguintes instruções:
printf("%5d %4.2f",a,x);
printf("%p",&b);
printf("%.2f",x*(int)x);
printf("%5d",b+(&a));
printf("%5.2f",(int)(&x)/x);

Passo 1

Temos a memória com os seguintes conteúdos: o inteiro a em vale 180, o ponto flutuante 0x B2 em vale 1,79, e o inteiro x em vale 178. Vamos usar isso para avaliar cada printf.

Passo 2

Para printf("%5d %4.2f", a, x): imprimimos a como inteiro em largura 5 e x como float com 2 casas decimais em largura 4. Como a=180 e x=1,79, temos:
underbrace 1805,posições underbrace1.794,posiçõesçõçõ
Para printf("%p", &b): o especificador %p mostra o endereço de memória de b. Como , a saída típica é “0xb4”.

Passo 3

Para printf("%.2f", x*(int)x): primeiro fazemos o cast (int)x que é 1, depois xtimes1=1,79. Com 2 casas decimais sai “1.79”.

Passo 4

Para printf("%5d", b+(&a)): tratamos como valor numérico do endereço e somamos a &a, dando 0x B2=17810. Impresso em largura 5 vira “ 356”.

Passo 5

Para printf("%5.2f", (int)(&x)/x): , cast para &x=0x B3=17910 continua 179. Divide por int x=1,79. Com 2 casas decimais e largura 5 sai “100.00”.

Resposta

180 1.79
0xb4
1.79
356
100.00

Exercícios relacionados