Ответ 1
Это целочисленный тип со знаком, который достаточно велик, чтобы удерживать указатель.
Он определен в /usr/include/stdint.h
:
typedef long int intptr_t;
должен ли он быть типом для целого или указателя?
Это целочисленный тип со знаком, который достаточно велик, чтобы удерживать указатель.
Это целочисленный тип со знаком, который может содержать тип void*
.
И почему существует также [u]intptr_t
? Потому что:
Любой действительный указатель на void может быть преобразован в
intptr_t
илиuintptr_t
и обратно без изменения стоимости. Стандарт C гарантирует, что указатель на void может быть преобразован в или из указатель на любой тип объекта и обратно и что результат должен сравните с исходным указателем. Следовательно, преобразование непосредственно от указателяchar *
доuintptr_t
разрешено для реализаций, поддерживающихuintptr_t
.