vamos la
primeiro, se vc remover a variavel ptr
isso só vai melhorar a sua vida.
ela é um ponteiro não inicializado. e isso é perigoso.
vc usa scanf para ler um inteiro e adicionar naquele endereço de memoria, e ai vc incrementa o endereço desse ponteiro.
o que acontece no final do primeiro loop é que prt esta na posição inicial de memoria + 10 “posições” depois.
vc vai ler conteudo que não faz sentido.
se vc fizer, ptr = ptr - 10;
no lugar de apontar para o vetor, vc vai ver o que vc acabou de escrever.
exemplo:
#include <stdio.h>
#include<stdlib.h>
#define MAX 3
int main(){
int *ptr,*vetor;
vetor=(int*)malloc(sizeof(int)*MAX);
printf("DEBUG: ptr=%p, vetor=%p\n",ptr,vetor);
for (int i = 1; i <= MAX; i++){
printf("Digite o valor de %d: \n",i);
scanf("%d",ptr);
printf("DEBUG: lido %d\n", *ptr);
ptr++;
}
ptr = ptr - MAX;
for (int i = 1; i <= MAX; i++){
printf("O valor pelo ponteiro %d\n",*ptr);
ptr++;
printf("O valor pelo vetor %d\n",vetor[i]);
}
return 0;
}
DEBUG: ptr=0x7ffd70aaa780, vetor=0x21b3010
Digite o valor de 1:
1
DEBUG: lido 1
Digite o valor de 2:
2
DEBUG: lido 2
Digite o valor de 3:
3
DEBUG: lido 3
O valor pelo ponteiro 1
O valor pelo vetor 0
O valor pelo ponteiro 2
O valor pelo vetor 0
O valor pelo ponteiro 3
O valor pelo vetor 0
agora vamos la: primeiro remova ptr e use apenas vetor.
uma vez que o seu programa funciona, vamos entender o que foi pedido:
Faça um codigo que tenha um ponteiro para um vetor de inteiros de 10 posições. Leia as 10 posições usando um ponteiro para o ponteiro;
assim, qual a minha leitura?
primeiro: vc não precisa do malloc. vc pode simplesmente declarar int vetor[10]
o que é vetor
? ora é um ponteiro! vc apenas informou ao compilador “oi eu quero 10 posições alocadas pra esse ponteiro por gentileza”.
quando vc faz vetor[i]
isso nada mais é que *(vetor + i)
– inclusive tem uma pegadinha que é perguntar o que significa 0[ vetor ];
que vc mata entendendo as propriedades matematicas da soma.
vamos la, se vetor é um ponteiro, então vc pode passar a referencia dele para outras variaveis.
veja esse exemplo:
#include <stdio.h>
int main(void){
int *ptr, vetor[10];
ptr = vetor;
for( int i=0;i< 10; i++) { ptr[i] = 666; }
for( int i=0;i< 10; i++) { printf("vetor[%d]=%d\n",i,vetor[i]); }
}
output:
vetor[0]=666
vetor[1]=666
vetor[2]=666
vetor[3]=666
vetor[4]=666
vetor[5]=666
vetor[6]=666
vetor[7]=666
vetor[8]=666
vetor[9]=666
agora imagine que no lugar de 666
vc usou o scanf para ler.
e o scanf recebe um ponteiro. vc não pode passar vetor[i] e sim &vetor[i]
creio q vc tem tudo o que vc precisa.
preste atenção com vetores.
na duvida, coloque rotinas que imprimam tudo o que esta acontecendo. ate vc aprender tecnicas de debug mais adequadas elas são uma mão na roda.