C странный синтаксис массива в многомерных массивах - PullRequest
12 голосов
/ 13 ноября 2011

Я знал, что это правда:

x[4] == 4[x]

Что эквивалентно для многомерных массивов? Верно ли следующее?

x[4][3] == 3[x[4]] == 3[4[x]]

Ответы [ 2 ]

14 голосов
/ 13 ноября 2011

x[y] определяется как *(x + (y))

x[y][z] станет *(*(x + (y)) + z)

x[y[z]] станет *(x + (*(y + (z))))


x[4][3] станет *(*(x + (4)) + 3) станет *(*(x + 4) + 3)

3[x[4]] станет *(3 + (*(x + (4)))) станет *(*(x + 4) + 3)

3[4[x]] станет *(3 + (*(4 + (x)))) станет *(*(x + 4) + 3)

Это означает, что все они эквивалентны.

1 голос
/ 13 ноября 2011

Да.В каждом случае x - это массив, который распадается на указатель, а затем выполняется арифметика указателя.

...