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