포인터(pointer)는 다른 변수의 메모리 주소를 값으로 가지는 변수입니다. 포인터 변수가 참조하는 위치에 저장된 데이터는 ToString() 메서드를 사용하여 가져올 수 있습니다.
C# 포인터의 기본 개념
C#에서 포인터를 사용하려면 unsafe 키워드로 코드 블록을 감싸야 하며, 프로젝트 설정에서 안전하지 않은(unsafe) 코드 허용 옵션을 활성화해야 합니다. 포인터 선언 시 자료형 뒤에 별표(*)를 붙이고, & 연산자를 사용하여 변수의 주소를 할당합니다.
예제 코드
다음은 포인터를 사용하여 데이터 값을 검색하는 예제입니다.
using System;
namespace UnsafeCodeApplication {
class Program {
public static void Main() {
unsafe {
int var = 100;
int* p = &var;
Console.WriteLine("Data is: {0} ", var);
Console.WriteLine("Data is: {0} ", p->ToString());
Console.WriteLine("Address is: {0} ", (int)p);
}
Console.ReadKey();
}
}
}코드 설명
int var = 100;: 정수형 변수 var에 100을 저장합니다.int* p = &var;: 정수형 포인터 p를 선언하고, var 변수의 메모리 주소를 할당합니다.p->ToString(): 포인터가 가리키는 위치의 데이터를 문자열 형태로 가져옵니다.(int)p: 포인터가 담고 있는 메모리 주소 값을 정수형으로 변환하여 출력합니다.
실행 결과
위 코드를 실행하려면 컴파일러의 unsafe 명령줄 옵션을 먼저 설정해야 합니다. Visual Studio에서는 프로젝트 속성 → 빌드 → '안전하지 않은 코드 허용' 옵션을 체크하거나, 명령줄 컴파일 시 /unsafe 옵션을 지정하면 됩니다. 설정 후 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Data is: 100 Data is: 100 Address is: 77678547
출력 결과에서 볼 수 있듯이, 변수에 직접 접근한 값과 포인터를 통해 검색한 값이 동일하게 100으로 출력되며, 마지막 줄에는 해당 변수가 저장된 메모리 주소가 표시됩니다. 단, 메모리 주소는 실행 환경과 시점에 따라 매번 달라질 수 있습니다.