Resolva cada um dos itens a seguir. Suponha que os números em ponto flutuante com precisão simples sejam armazenados em 4 bytes, e que o endereço inicial do array esteja no local 1002500 na memória. Cada parte do exercício deverá usar os resultados das partes anteriores, se isso for apropriado.
a) Defina um array do tipo float chamado numbers com 10 elementos, e inicialize os elementos com os valores 0.0, 1.1, 2.2, ..., 9.9. Suponha que a constante simbólica SIZE tenha sido definida como 10.
b) Defina um ponteiro, nPtr, que aponte um objeto do tipo float.
c) Imprima os elementos do array numbers utilizando a notação de subscrito de array. Use uma instrução for e suponha que a variável de controle inteira i tenha sido definida. Imprima cada número com 1 posição de precisão à direita do ponto decimal.
d) Indique duas instruções separadas que atribuam o endereço inicial do array numbers à variável de ponteiro nPtr.
e) Imprima os elementos do array numbers usando a notação ponteiro/deslocamento com o ponteiro nPtr.
f) Imprima os elementos do array numbers usando a notação de ponteiro/deslocamento com o nome de array como ponteiro.
g) Imprima os elementos do array numbers subscritando o ponteiro nPtr.
h) Faça referência ao elemento 4 do array numbers usando a notação de subscrito de array, a notação de ponteiro/deslocamento com o nome do array como ponteiro, a notação de subscrito de ponteiro com nPtr e a notação de ponteiro/deslocamento com nPtr.
i) Supondo que nPtr aponte para o início do array numbers, qual endereço é referenciado por nPtr + 8? Que valor é armazenado nesse local?
j) Supondo que nPtr aponte para numbers[5], qual endereço é referenciado por nPtr –= 4? Qual o valor armazenado nesse local?
Passo 1
Opa, tudo bom?
Vamos resolver mais um probleminha.
Na letra a, temos que definir um array do tipo float chamado “numbers” e inicializá- lo com 10 elementos.
![]()
Passo 2
Na letra b, temos que definir um ponteiro que aponte para uma variável do tipo float
![]()
Passo 3
Na letra c, devemos imprimir os elementos do array numbers utilizando a notação de subscrito de array e o laço for.

Passo 4
Na letra d, temos que indicar duas instruções que atribuam o endereço inicial do array numbers à variável de ponteiro nPtr.
![]()
Passo 5
Na letra e, devemos imprimir os elementos do array numbers usando a notação ponteiro/deslocamento com o ponteiro nPtr.

Passo 6
Na letra f, solicita - se a impressão dos elementos do array numbers usando a notação de ponteiro/deslocamento com o nome de array como ponteiro.

Passo 7
Na letra g, é pedido a impressão dos elementos do array numbers subscritando o ponteiro nPtr.

Passo 8
Na letra h, temos que nos referir ao elemento 4 do array numbers usando a notação de subscrito de array, a notação de ponteiro/deslocamento com o nome do array como ponteiro, a notação de subscrito de ponteiro com nPtr e a notação de ponteiro/deslocamento com nPtr.

Passo 9
Na letra i, temos que descobrir qual endereço é referenciado por nPtr + 8, e que valor é armazenado nesse local.
Como no início do nosso probleminha temos que o numbers[0] está no endereço 1002500, logo o endereço apontado pelo nPtr + 8 será 1002500 + 4 * 8, uma vez que cada número ocupa 4 bytes de memória. Então o endereço correspondente é 1002532. E o valor correspondente é 8.8 .

Passo 10
Na letra j, temos que descobrir qual endereço é referenciado por nPtr –= 4, e qual o valor armazenado nesse local, uma vez que o nPtr aponta para o numbers[5].
O endereço do numbers[5] é 1002500 + 5*4, uma vez que cada número ocupa 4 bytes na memória. Logo o endereço correspondente do numbers[5] é 1002520.
Porém a questão deseja saber do n´tr -= 4, então será 1002520 - 4*4 = 1002504. O valor correspondente a esse endereço é 1.1 .
Bons Estudos! :)
Resposta
a)
float numbers[SIZE]= {0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};
b)
float *nPtr;
c)
for(int i = 0; i
{
printf("%.1f\n", numbers[i]);
}
d)
nPtr = numbers;
nPtr = &numbers[0];
e)
for(int i = 0; i
printf("%.1f ", *(nPtr + 1));
}
f)
for(int i = 0; i
printf("%.1f ", *(numbers + 1));
}
g)
for(int i = 0; i
printf("%.1f ", nPtr[i]);
}
h)
numbers[4]
*(numbers + 4)
nPtr[4]
*(nPtr + 4)
i)
O endereço é 1002500 + 8 * 4 = 1002532. O valor é 8.8.
j)
O endereço de nPtr -= 4 is 1002520 - 4 * 4 = 1002504. O valor nesse local é 1.1.