Po prostu dla zabawy, miałem std::list
z const char*
, każdy element wskazuje na zakończony znakiem NUL ciąg tekstowy i uruchomił na nim std::list::sort()
. Tak się składa, że nie jest to sortowanie strun. Biorąc pod uwagę, że pracował nad wskaźnikami, ma to sens.Jak działają operatory ze wskaźnikami?
Zgodnie z documentation z , (domyślnie) używa operator <
między elementami do porównania.
Zapominając o liście przez chwilę, moje aktualne pytanie brzmi: Jak operatorzy pracują nad wskaźnikami w C++ i C (>, <,> =, < =)? Czy oni po prostu porównują rzeczywiste adresy pamięci?
char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;
np. na 32-bitowym, mało-endianowym systemie, p1
>p2
ponieważ 0xDAB0BC47
>0xBABEC475
?
Testy zdają się potwierdzać to, ale pomyślałem, że dobrze byłoby umieścić go na StackOverflow, aby móc z niego skorzystać w przyszłości. C i C++ są przeznaczone na wskaźniki, więc nigdy naprawdę nie wiadomo ...
Tak, po prostu porównują adresy pamięci. – user168715
Endiadness nie ma tutaj zastosowania. p1> p2 czy duży/niski endian. –
Tak, zauważyłem, ale fajnie było pisać DABOBCAT i BABECATS z szesnastkowymi znakami, więc zignorowałem niezbyt wielką wielkość przykładu ... – Oystein