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