Solo per divertimento, ho avuto un std::list
di const char*
, ogni elemento che punta a una stringa di testo con terminazione null e ha eseguito uno std::list::sort()
su di esso. Accade che, in un certo senso (nessun gioco di parole) non ha ordinato le stringhe. Considerando che stava lavorando a dei puntatori, questo ha senso.Come funzionano gli operatori < and > con i puntatori?
In base allo documentation di std::list::sort()
, esso (per impostazione predefinita) utilizza lo operator <
tra gli elementi da confrontare.
Dimenticato sull'elenco per un momento, la mia domanda effettiva è: come funzionano questi (>, <,> =, < =) sui puntatori in C++ e C? Confronta semplicemente gli attuali indirizzi di memoria?
char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;
esempio su un sistema little-endian a 32 bit, p1
>p2
perché 0xDAB0BC47
>0xBABEC475
?
I test sembrano confermarlo, ma ho pensato che sarebbe stato utile inserirlo in StackOverflow per riferimento futuro. C e C++, sia fare un po 'weird things ai puntatori, in modo da non si sa mai ...
Sì, si limitano a confrontare gli indirizzi di memoria. – user168715
L'endiadness non è rilevante qui. p1> p2 se big/low endian. –
Sì, ho notato, ma è stato divertente scrivere DABOBCAT e BABECATS con caratteri esadecimali, quindi ho ignorato la non-grandiosità dell'esempio ... – Oystein