Znam, że to prawda:C dziwne składni tablicy w tablicach wielowymiarowych
x[4] == 4[x]
Co jest odpowiednikiem dla tablic wielowymiarowych? Czy poniższe stwierdzenie jest prawdziwe?
x[4][3] == 3[x[4]] == 3[4[x]]
Znam, że to prawda:C dziwne składni tablicy w tablicach wielowymiarowych
x[4] == 4[x]
Co jest odpowiednikiem dla tablic wielowymiarowych? Czy poniższe stwierdzenie jest prawdziwe?
x[4][3] == 3[x[4]] == 3[4[x]]
x[y]
jest zdefiniowana jako *(x + (y))
x[y][z]
stanie *(*(x + (y)) + z)
x[y[z]]
stanie *(x + (*(y + (z))))
x[4][3]
stanie *(*(x + (4)) + 3)
staną
*(*(x + 4) + 3)
3[x[4]]
staną *(3 + (*(x + (4))))
staną *(*(x + 4) + 3)
3[4[x]]
staną *(3 + (*(4 + (x))))
staną *(*(x + 4) + 3)
Czyli wszystkie są równoważne.
W przypadku tablicy wielowymiarowej 'int x [5] [7]' miałbyś 'x [y] [z]' zdefiniowany jako '* (x + 7 * y + z)'. A 'x [y]' stałoby się 'x + 7 * y', tj. Wskaźnikiem do wskazanego plasterka. Sądzę jednak, że ekwiwalenty nadal istnieją, nawet jeśli rozszerzone wyrażenia są nieco dłuższe. Jeśli kompilator w ogóle akceptuje kod, to znaczy. – MvG
Tak. W każdym przypadku x
jest tablicą, która rozpada się na wskaźnik, a następnie wykonuje na niej arytmetykę wskaźnika.
Spróbowałeś? Co się stało? –
Jak jest x [4] równe 4 [x]? –
@ Jim: x [4] == * (x + 4) == * (4 + x) == 4 [x] –