Llevando la contraria sobre la sintaxis de arrays en C

Hola, hoy quería mostrar una pequeña ida de olla, hechadle un vistazo al siguiente código:

int main(int argc, char  **argv){ 
    char *x = "Hola, mundo!\n";
    int i;
    for (i = 0; i[x] != '\0';i++){
         putchar(i[x]);
    }
    return 0;
}

Compila, y hace lo que parece, pero tiene algo extraño... el orden variable [posición] está invertido, por que sigue funcionando.

Lo que pasa es que la posición de memoria se calcula como <dirección a la que apunta 'variable'> + (<posición> * <tamaño de continue.