C# 포인터(Pointer)란?
포인터(pointer)는 다른 변수의 주소, 즉 특정 메모리 위치의 직접적인 주소를 값으로 가지는 변수입니다. 일반 변수가 데이터 자체를 저장한다면, 포인터는 그 데이터가 위치한 메모리상의 주소를 가리킨다는 점에서 차이가 있습니다.
포인터 선언 문법
포인터를 선언하는 기본 문법은 다음과 같습니다.
type *var-name;
예를 들어 double 형 변수를 가리키는 포인터는 아래와 같이 선언할 수 있습니다.
double *z; /* double형을 가리키는 포인터 */
unsafe 한정자와 포인터 사용 조건
C#은 기본적으로 타입 안정성을 중시하는 언어이기 때문에, 포인터 변수는 unsafe 한정자로 표시된 함수나 코드 블록 안에서만 사용할 수 있습니다. 이처럼 포인터 변수를 직접 다루는 코드 블록을 unsafe 코드(비관리 코드, unmanaged code)라고 부릅니다.
포인터 선언 및 사용 예제
다음 예제는 unsafe 한정자를 활용해 포인터 변수를 선언하고 사용하는 방법을 보여줍니다.
static unsafe void Main(string[] args) {
int val = 50;
int* x = &val;
Console.WriteLine("Data: {0} ", val);
Console.WriteLine("Address: {0}", (int)x);
Console.ReadKey();
}
위 코드에서 &val은 변수 val의 메모리 주소를 얻는 주소 연산자이며, 이 주소가 int형 포인터 x에 저장됩니다. 프로그램을 실행하면 변수의 값(50)과 함께 해당 변수가 저장된 메모리 주소가 출력되는 것을 확인할 수 있습니다.