Что за тип данных uintptr_t в C++ и для чего он?
Чем он отличается от int*
? Что значит "принять указатель и не потерять значение" ? В каких случаях оно теряется? Где применять этот тип и какой от него смысл?
int main() {
int n = 10;
int* pointerN = &n;
uintptr_t ptr = uintptr_t(pointerN);
pointerN = (int*)ptr;
return 0;
}
Вот так можно?
Ответы (1 шт):
Чем он отличается от
int*
?
Много чем, потому что uintptr_t
- вообще не указатель. Это typedef
(другое имя) для одного из беззнаковых типов: unsigned int
, unsigned long
, unsigned long long
... Того из них, у которого sizeof
совпадает с размером указателя (т.е. обычно 8 байт).
Зачем нужен? Например если вы не знаете заранее, что будете хранить, указатель или число, то можно скастовать указатель в такой тип (а потом обратно, перед использованием).
Что значит "принять указатель и не потерять значение" ? В каких случаях оно теряется?
Если скастовать указатель в более мелкий целочисленный тип, очевидно.