niedziela, 3 marca 2013

(C/C++) Smaczki ukryte w operatorach

Krzak pisał o tajemnym operatorze w C: downto, to może też dorzucę coś od siebie ;)

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