1
resposta

Dúvida de exercícios sobre ponteiros

Bom dia, fiz esse exercício, porém acredito que não fiz do modo que o professor queria, gostaria de ajuda para resolve-lo, segue ele abaixo:

Crie um programa, na linguagem C, em que dada uma sequência de n números inteiros, imprima a sequência na ordem em que eles são apresentados.

Obs.: Não use colchetes. Use apenas ponteiros.

Exemplo: Entrada

9 11 22 33 44 55 66 77 88 99

Saída

11 22 33 44 55 66 77 88 99

Observação:

Um esqueleto inicial da solução deste problema está disponível no Moodle. Sua tarefa é terminar essa solução inicial fornecendo uma implementação para a função requerida.

Você pode adicionar outras funções ao arquivo, caso ache necessário, mas você não deve modificar a assinatura (nome, parâmetros e tipo de retorno) da função cuja implementação está sendo requisitada.

O Moodle não possui a capacidade de verificar se a sua solução usa ou não ponteiros. Assim, caso você submeta uma solução correta, porém que não utilize ponteiros, essa solução será aceita pelo Moodle. Entretanto, posteriormente será feita uma verificação manual das soluções e aquelas que não usem ponteiros terão a nota zerada.

Segue meu código abaixo

#include <stdio.h>
#include <stdlib.h>

// Observação: Não devem ser utilizadas variáveis globais

//////////////////////////////////////////////////////////////////////////////////
// Este exercício requer que seja implementada a seguinte função com a assinatura
//////////////////////////////////////////////////////////////////////////////////

void imprimirElementos(int *V, int n) {
/* imprimirElementos é uma função que recebe um ponteiro a um vetor de 'n'

* números inteiros, e imprime os elementos da esquerda para a direita.
* Esta função deve ser implementada SEM o uso de COLCHETES.
* Isto é, não deve usar '[' nem ']'. */
for(int i=0; i<n; i++){
printf("%d ", V[i]);
}
}


//////////////////////////////////////////////////////////////////////////////////
// As seguintes linhas não devem ser modificadas
//////////////////////////////////////////////////////////////////////////////////
int main(void) {
int *V, n, i;

scanf("%d", &n);

// reserva espaço de memoria para armazenar 'n' números inteiros
V = (int *) malloc(n*sizeof(int));

// leitura dos elementos
for (i=0; i<n; i++)
scanf("%d", V+i);

imprimirElementos(V, n);

// libera espaço reservado para o vetor
free(V);
return 0;
}
1 resposta

Boa madrugada Juliana, esse problema me lembra muito um problema que eu tive na faculdade (UFRRJ) que também utilizava o moodle, enfim coincidências, o ponteiro ele está apontando para um espaço de memória onde ta aquela caixinha do vetor, então quando somamos uma certa quantidade de bits no ponteiro ele passa a apontar para espaços de memória que estão à frente do espaço anterior, como o vetor é alocado todo junto você pode assim ir avançando nele.

Nesse trecho de código:

for(int i=0; i<n; i++){
    printf("%d ", V[i]);
}

Imagino que fique algo assim:

for(int i=0; i<n; i++) 
{
    printf("%i", V*); // não me lembro agora se o asterisco é à direita ou esquerda, mas ele significa o conteúdo do endereço de V
    V += sizeof(int);
}

Espero ter chegado a tempo para resolver! Ou pelo menos tenha ajudado