W C i C++ tablice nie są obiektami, natomiast swobodny dostęp do nich realizowany jest przez operator nawiasu kwadratowego. Truizm.
Czy wiesz, że taki kod:
char[] str="Alicja"; std::cout<< str[3] <<endl;
może być zapisany tak:
char[] str="Alicja"; std::cout<< 3[str] <<endl;
Zdziwienie?
W C++ operator [] jest przemienny, tj. tab[i] jest tożsame z i[tab]. To prowadzi do absurdalnych wniosków, jakoby mozna było indeksować liczby tablicami. Owszem, można.
Rozwiązanie zagadki: Tablice w C są wskaźnikami. Formalnie: tworząc tablicę na prawdę uzyskujemy wskaźnik do zadeklarowanego obszaru pamięci. Operator nawiasu kwadratowego na wskaźniku działa następująco:
std::cout<<tab[ind]<<std::endl; //jest tozsame z std::cout<<*(tab+ind)<<std::endl;
Skoro dodawanie jest przemienne, to *(tab+ind) jest tożsame z *(ind+tab), czyli ind[tab]. Oto cała tajemnica....
Brak komentarzy:
Prześlij komentarz