IntPtr은 정수형 포인터(integer pointer)를 의미하는 값 형식의 타입이다. 포인터는 메모리 주솟값을
보관하는 곳이므로 32비트 프로그램에서는 2^32주소 영역을 지정할 수 있어야 하고, 64비트 프로그
램에서는 2^64주소 영역을 지정할 수 있어야 한다. 이 때문에 IntPtr 자료형은 32비트 프로그램에서
는 4바이트, 64비트 프로그램에서는 8바이트로 동작하는 특징을 갖는다.
Console.WriteLine(IntPtr.Size);
// 출력결과
// 32비트 프로그램의 경우: 4
// 64비트 프로그램의 경우: 8
IntPtr 타입은 메모리 주소를 가리키는 것 외에 윈도우 운영체제의 핸들(HANDLE) 값을 보관하는
용도로도 쓰인다. 핸들은 윈도우 운영체제가 특정 자원에 대한 식별자(identifier)로서 보관하는 값인
데, 일례로 파일이 좋은 예다. 닷넷 BCL 에서도 FileStream에서 핸들 값을 알 수 있는 속성이 제공된다.
using (FileStream fs = new FileStream("test.dat", FileMode.Create))
{
Console.WriteLine(fs.Handle);
}
순수 닷넷 응용 프로그램을 작성한다면 IntPtr 타입을 사용할 기회가 거의 없다. 단지 윈도우 운영체
제에서 제공되는 Win32 API를 호출하거나, 기존 C/C++로 작성된 프로그램과의 상호 연동해야 할
때는 IntPtr이 사용될 수 밖에 없다.