The trick is to build the for
loop, you have to count from the end to the beginning of the array (vector)
#include <stdio.h>
int main() {
int original[] = {1,2,3,4,5,6};
int count = sizeof(original) / sizeof(int); // 6, numero de elementos no array original
int revertido[count], i, j; // declaramos que o array revertido vai ter o mesmo numero de elementos que original
// vamos iniciar o i em count - 1, (5 indexes dos elementos do array original) vai servir para percorrermos o original do fim para o inicio, subtraimos 1 a cada volta
// vamos iniciar o j em 0 para podermos armazenar cada valor do original a partir do index 0 no array revertido, j vai ser cada index do array revertido
// o loop e finalizado quando j < count (quando j for 5), iria dar o mesmo resultado se a condicao fosse i >= 0
for (i = count-1, j = 0; j < count; i--, j++) {
revertido[j] = original[i]; // no primeiro loop o ultimo valor do original vai ser o primeiro valor (com index 0) do array revertido, no segundo loop o penultimo do original vai ser o segundo do revertido, etc...
}
for (i = 0; i < count; i++) {
printf("%d \n", revertido[i]);
}
return (0);
}
Once you understand the logic, if you want to simplify, you can solve using only the variable i
in the loop, and thus we do not even need j
:
for ( i = 0; i < count; i++) {
revertido[i] = original[count - i - 1];
}
// Se i for zero, count - i - 1 será o
// último elemento (original[6 - 0 - 1] = original[5]), se for 1, será o
// penúltimo, e assim sucessivamente.