Le type IntPtr est conçu pour être un entier dont la taille est spécifique à la plate-forme. C'est-à-dire qu'une instance de ce type devrait être de 32 bits sur des matériels et systèmes d'exploitation 32 bits et de 64 bits sur des matériels et des systèmes d'exploitation 64 bits.
Le type IntPtr peut être utilisé par des langages qui prennent en charge les pointeurs ; il offre un moyen commun de faire référence à des données entre langages prenant et ne prenant pas en charge les pointeurs.
Il est également possible d'utiliser des objets IntPtr pour contenir des handles. Par exemple, les instances de IntPtr sont largement utilisées dans la classe System.IO.FileStream pour contenir des handles de fichiers.
Le type IntPtr est conforme CLS alors que le type UIntPtr ne l'est pas. Le seul type utilisé dans le Common Language Runtime est le type IntPtr. Le type UIntPtr existe surtout pour assurer une symétrie architecturale avec le type IntPtr.
Ce type implémente l'interface ISerializable.