C#에서는 unsafe 한정자를 사용하면 포인터를 직접 다룰 수 있으며, 이를 메서드의 매개변수로 전달하는 것도 가능합니다. 아래 단계를 따라 포인터를 메서드에 전달하는 방법을 살펴보겠습니다.
1단계: unsafe 한정자로 swap 함수 작성
먼저 두 정수 값의 위치를 서로 바꾸는 swap 함수를 만듭니다. 포인터를 사용하므로 반드시 unsafe 한정자를 붙여야 합니다.
public unsafe void swap(int* p, int *q) {
int temp = *p;
*p = *q;
*q = temp;
}
이 함수는 포인터 p와 q가 가리키는 메모리 주소에 저장된 값을 임시 변수 temp를 이용해 서로 교환합니다.
2단계: Main 메서드에서 변수와 포인터 설정
Main 메서드 안에서 첫 번째와 두 번째 변수에 값을 할당한 뒤, 각각의 주소를 가리키는 포인터를 설정합니다.
public unsafe static void Main() {
Program p = new Program();
int var1 = 10;
int var2 = 20;
int* x = &var1;
int* y = &var2;
Console.WriteLine("Before Swap: var1:{0}, var2: {1}", var1, var2);
p.swap(x, y);
Console.WriteLine("After Swap: var1:{0}, var2: {1}", var1, var2);
Console.ReadKey();
}
3단계: 실행 결과 확인
변수 값을 화면에 출력한 후 위에서 작성한 swap() 메서드를 호출합니다. 메서드가 두 값을 교환하면 그 결과가 출력됩니다.
실행 결과는 다음과 같습니다.
Before Swap: var1:10, var2: 20 After Swap: var1:20, var2: 10
참고 사항
포인터를 사용하는 코드는 안전성 검증을 벗어나므로, 프로젝트 컴파일 시 /unsafe 옵션을 활성화해야 합니다. Visual Studio에서는 프로젝트 속성 → 빌드 → '안전하지 않은 코드 허용'을 체크하면 됩니다. 또한 포인터는 관리되지 않는 메모리에 직접 접근하기 때문에, 일반적인 상황에서는 ref 키워드를 사용하는 것이 더 안전하고 권장됩니다.