Duplicar posible:
In C arrays why is this true? a[5] == 5[a]¿Por qué funciona esto? Ilógica acceso a matriz
Un amigo mío está aprendiendo C++, por primera vez, y me envió este fragmento:
int foo[] = { 3, 38, 38, 0, 19, 21, 3, 11, 19, 42 };
char bar[] = " abcdefghijklmnopqrstuvwxyz-,.!?-_";
for (int i = 0; i < 10; ++i) {
std::cout << foo[i][bar];
}
En una vistazo, le dije que no funcionaría - pensé que no compilaría, o al menos daría lugar a una violación de acceso, ya que foo
no es un matriz bidimensional, a lo que él respondió que sí.
Lo intenté por mí mismo, y para mi sorpresa, el fragmento funcionó perfectamente bien. La pregunta es: ¿por qué?
De acuerdo con la lógica, el sentido común y las buenas prácticas, la sintaxis debe ser bar[foo[i]]
.
Me da vergüenza admitir que no tengo idea de lo que está pasando. ¿Qué hace que foo[i][bar]
sea una sintaxis válida en este caso?
Esto no es un duplicado exacto, y la respuesta es bastante interesante. La causa raíz de ambas preguntas es la misma, pero eso es cierto para cientos de preguntas en StackOverflow. –
BTW: Solo estaría de acuerdo con la salida si estuviera haciendo este tipo de cosas ... – stefaanv
Curiosamente, esta realmente tiene sentido si uno lee la pregunta vinculada, pero sigue siendo exactamente tan ilógico como lo es cuando no lo haces lo entiendo; la parte ilógica simplemente cambia de "cómo funciona esto" a "por qué dejaron que esto funcionara". –