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:
1 2 3 4 5 6 7 8 |
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 una unidad de la variable>). Para los strings, el "tamaño de una unidad" es 1, así que queda como: <dirección a la que apunta variable> + <posición>, la suma es conmutativa, así que las posiciónes se pueden intercambiar.
ps: Obviamente esto no se debería hacer en código "real", por lo que pueda pasar si cambian los tipos de datos ;)
Saludos