Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 메서드의 매개변수로 포인터를 전달하는 방법

C#에서는 unsafe 한정자를 사용하면 포인터를 직접 다룰 수 있으며, 이를 메서드의 매개변수로 전달하는 것도 가능합니다. 아래 단계를 따라 포인터를 메서드에 전달하는 방법을 살펴보겠습니다.

1단계: unsafe 한정자로 swap 함수 작성

먼저 두 정수 값의 위치를 서로 바꾸는 swap 함수를 만듭니다. 포인터를 사용하므로 반드시 unsafe 한정자를 붙여야 합니다.

public unsafe void swap(int* p, int *q) {
    int temp = *p;
    *p = *q;
    *q = temp;
}

이 함수는 포인터 pq가 가리키는 메모리 주소에 저장된 값을 임시 변수 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 키워드를 사용하는 것이 더 안전하고 권장됩니다.