Я наткнулся на эту функцию:
int foo(int *p)
{
return p - (int*)0;
}
Может кто-нибудь объяснить, что это делает? Кажется, он возвращает целое число. Какая логика стоит за этим вычитанием нулевого указателя? Также был комментарий, что это чистая и реентерабельная функция.
uintptr_t
? 22.05.2013uintptr_t
вовсе не является неопределенным поведением. Результат определяется реализацией, но в этом нет UB. 22.05.2013(uintptr_t)p / sizeof(int)
будет более определенным (покаuintptr_t
существует): определяется реализацией с примечанием, что сопоставление не должно удивлять тех, кто знает структуру адресации базовой машины. 22.05.2013