Entendendo o funcionamento de ponteiro para ponteiro
#include <stdio.h>
int main(){
int v1[] = {5,1,7,9};
int num1, num2;
int *p1;
scanf("%i", &num1);
if(num1 == 1){
p1 = &v1;
p1++;
num2 = *p1;
} else if (num1 == 2){
p1 = &v1[3];
num2 = *p1;
} else{
p1 = &v1;
num2 = *p1;
}
printf("%i", num2);
return 0;
}
Vamos analisar o código passo a passo:
Incluímos a biblioteca "stdio.h", que nos permite usar a função "scanf" e "printf".
Iniciamos a função "main".
Criamos um vetor chamado "v1" com os valores {5, 1, 7, 9}. É como uma caixa que guarda 4 números.
Definimos duas variáveis inteiras chamadas "num1" e "num2". Elas serão usadas para armazenar números.
Criamos um ponteiro chamado "p1". Um ponteiro é como um dedo que pode apontar para algo, nesse caso, ele vai apontar para um número.
Usamos a função "scanf" para ler um número digitado pelo usuário e guardá-lo na variável "num1". É como perguntar para a criança qual número ela quer escolher.
Iniciamos uma estrutura condicional "if". Se o número digitado for igual a 1, fazemos o que está dentro das chaves a seguir.
Fazemos o ponteiro "p1" apontar para o segundo número do vetor "v1". É como se o dedo estivesse apontando para o número 1.
Movemos o ponteiro "p1" para o próximo número do vetor. Agora o dedo está apontando para o número 7.
Atribuímos o valor do número apontado pelo ponteiro "p1" à variável "num2". Ou seja, guardamos o valor 7 na variável "num2".
Se o número digitado não for igual a 1, vamos para o próximo "else if" e verificamos se é igual a 2.
Se o número digitado for igual a 2, fazemos o que está dentro das chaves a seguir.
Fazemos o ponteiro "p1" apontar para o último número do vetor "v1". O dedo está apontando para o número 9.
Atribuímos o valor do número apontado pelo ponteiro "p1" à variável "num2". Agora a variável "num2" guarda o valor 9.
Se nenhuma das condições anteriores for verdadeira, executamos o bloco de código dentro do "else".
Fazemos o ponteiro "p1" apontar para o primeiro número do vetor "v1". O dedo está apontando para o número 5.
Atribuímos o valor do número apontado pelo ponteiro "p1" à variável "num2". Agora a variável "num2" guarda o valor 5.
Usamos a função "printf" para exibir o valor da variável "num2". É como mostrar para a criança qual número foi escolhido.
Retornamos 0 para indicar que o programa foi executado corretamente.
Espero que isso tenha sido útil! Se tiver mais dúvidas, é só perguntar.
http://www3.decom.ufop.br/toffolo/site_media/uploads/2018-2/bcc201/exercicios/Lista8_ponteiros.pdf
https://www.inf.pucrs.br/~pinho/PRGSWB/Exercicios/AlocacaoDinamica/Exercicio-AlocacaoDinamica.html