int tab[] = { 1, 2, 3, 4, 5 }; const int n = 2;
wtedy można zrobić tak:
int wynik = tab[n];
ale ale ...... można też tak:
int wynik = n[tab];
Dziwne?
W zasadzie tak wyszło przez przypadek. Gdy powstawał C (a może nawet B), operator nawiasu kwadratowego był lukrem składniowym. Nim wprowadzono go do języka n-ty element tablicy tab otrzymywano w taki sposób:
T operator[]( loperand, roperand ) { return *(loperand+roperand); }(co całkiem nieźle tłumaczy czemu tablice numerujemy od zera)
Później wprowadzono operator[], który wewnątrz robi dokładnie to samo, co kod powyżej. Ponieważ relacja jest przemienna, bo *(tab+n) <=> *(n+tab), to możliwe jest zamiana indeksu i tablicy.
Lubię ten język : )
Brak komentarzy:
Prześlij komentarz