Что за тип данных uintptr_t в C++ и для чего он?

Чем он отличается от int* ? Что значит "принять указатель и не потерять значение" ? В каких случаях оно теряется? Где применять этот тип и какой от него смысл?

int main() {
    int n = 10;
    int* pointerN = &n;
    uintptr_t ptr = uintptr_t(pointerN);
    pointerN = (int*)ptr;

    return 0;
}

Вот так можно?


Ответы (1 шт):

Автор решения: HolyBlackCat

Чем он отличается от int* ?

Много чем, потому что uintptr_t - вообще не указатель. Это typedef (другое имя) для одного из беззнаковых типов: unsigned int, unsigned long, unsigned long long... Того из них, у которого sizeof совпадает с размером указателя (т.е. обычно 8 байт).

Зачем нужен? Например если вы не знаете заранее, что будете хранить, указатель или число, то можно скастовать указатель в такой тип (а потом обратно, перед использованием).

Что значит "принять указатель и не потерять значение" ? В каких случаях оно теряется?

Если скастовать указатель в более мелкий целочисленный тип, очевидно.

→ Ссылка