Encontre o erro em cada um dos segmentos de programa a seguir. Considere

int *zPtr; /* zPtr referenciará o array z */

int *aPtr = NULL;

void *sPtr = NULL;

int number, i;

int z[ 5 ] = { 1, 2, 3, 4, 5 };

sPtr = z;

a) ++zptr;

b) /* usa o ponteiro para obter o primeiro valor do array; suponha que zPtr seja inicializado */number = zPtr;

c) /* atribui o elemento do array 2 (o valor 3) a number;suponha que zPtr seja inicializado */number = *zPtr [ 2 ];

d) /* imprime array z inteiro; suponha que zPtr seja inicializado */ for ( i = 0; i

e) /* atribui o valor apontado por sPtr a number */number = *sPtr;

f) ++z;

Passo 1

Fala Galera!!! Mais um exercício para treinar e ficar craque em programação. Bora analisar cada alternativas

Na letra a) o erro está no zPtr que não foi inicializado. Para corrigir é preciso fazer a inicialização do zPtr = z; amtes de realizar a aritmética de ponteiro.

Passo 2

Na letra b) o erro é o fato de o ponteiro não estar desreferenciado. Para corrigir é preciso mudar a instrução para number = *zPtr;

Passo 3

Na letra c) o erro está no zPtr[2] que não é um ponteiro e não deve ser desreferenciado. Para corrigir é preciso alterar *zPtr[2] para zPtr[2]

Passo 4

Na letra d) o erro é referir-se a um elemento do array fora dos limites do array com subscrito de ponteiro. Para corrigir é preciso mudar o operador

Passo 5

Na letra e) o erro é desreferenciar um ponteiro void. Para corrigr é preciso desreferenciar o ponteiro, ele primeiro precisa ser convertido para um ponteiro inteiro. Logo, é preciso mudar a instrução para number = *(( int*) sPtr);

Passo 6

Na letra f) o erro é tentar modificar um nome de array com aritmética de ponteiro. Para corrigir use uma variável de ponteiro em vez do nome do array para realizar a aritmética de ponteiro, ou crie um subscrito do nome do array para se referir a um elemento específico.

Prontinho Galera!!! Agora partiu para o próximo exercício!!!

Resposta

Desenvolvimento acima.