he sabido que esto es cierto:C sintaxis extraña serie de matrices multidimensionales
x[4] == 4[x]
Cuál es el equivalente para las matrices multidimensionales? ¿Es cierto lo siguiente?
x[4][3] == 3[x[4]] == 3[4[x]]
he sabido que esto es cierto:C sintaxis extraña serie de matrices multidimensionales
x[4] == 4[x]
Cuál es el equivalente para las matrices multidimensionales? ¿Es cierto lo siguiente?
x[4][3] == 3[x[4]] == 3[4[x]]
x[y]
se define como *(x + (y))
x[y][z]
se convertiría en *(*(x + (y)) + z)
x[y[z]]
se convertiría en *(x + (*(y + (z))))
x[4][3]
se convertiría en *(*(x + (4)) + 3)
se convertiría en
*(*(x + 4) + 3)
3[x[4]]
se convertiría en *(3 + (*(x + (4))))
se convertiría en *(*(x + 4) + 3)
3[4[x]]
se convertiría en *(3 + (*(4 + (x))))
se convertiría en *(*(x + 4) + 3)
que significa que son todos equivalentes.
En el caso de una matriz multidimensional 'int x [5] [7]', usted tendría 'x [y] [z]' definido como '* (x + 7 * y + z)'. Y 'x [y]' se convertiría en 'x + 7 * y', es decir, el puntero al sector indicado. Pero creo que las equivalencias aún se mantienen, incluso si las expresiones expandidas son algo más largas. Si el compilador acepta el código en absoluto, eso es. – MvG
Sí. En cada caso, x
es una matriz que se desintegra a un puntero y luego tiene una aritmética de puntero realizada sobre ella.
¿Lo intentó? ¿Que pasó? –
¿Cómo es x [4] igual a 4 [x]? –
@Jim: x [4] == * (x + 4) == * (4 + x) == 4 [x] –