2011-11-13 21 views
11

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]] 
+2

¿Lo intentó? ¿Que pasó? –

+0

¿Cómo es x [4] igual a 4 [x]? –

+1

@Jim: x [4] == * (x + 4) == * (4 + x) == 4 [x] –

Respuesta

13

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.

+0

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

1

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.

Cuestiones relacionadas