Notice
Recent Posts
Recent Comments
Link
관리 메뉴

거북이처럼 천천히

C++ Generic pointer 본문

C++

C++ Generic pointer

유로 청년 2026. 1. 27. 21:35

1. Generic pointer

  • 특정 자료형(Specific type)에 얽매이지 않고, 모든 자료형 변수의 주소를 담는 포인터
  • 가리키는 대상의 자료형(Type)이 정해지지 않은 포인터

 

 

1-1. 제네릭 포인터의 사용 주의 사항

  • 제네릭 포인터는 모든 자료형 변수의 주소를 담을 수 있는 포인터이지만, 사용시 엄격한 규칙을 갖는다.
  • 이유는 생각해보면 단순하다. 제네릭 포인터를 통해 역참조할 경우, 현재 제네릭 포인터가 가르키는 변수의 자료형이 int형 변수의 주소인지, char형 변수의 주소인지 어떻게 아는가? 당연히 모른다.
  • 따라서 제네릭 포인터를 역참조하여 데이터를 꺼내기 위해서는 형변환이 필수 이다.
  • 또한, 포인터 연산 또한 불가능하다. 만약, 제네릭 포인터가 가르키는 주소가 배열이 아닌 일반 변수라면 ptr+1할 경우, 타 메모리 주소로 접근하여 해당 주소에 있는 데이터를 훼손할 가능성이 있기 때문이다.

 

 

1-2. 제네릭 포인터 사용 예시 (C언어)

int a = 10;

void* p_gen = &a;

int b = *(int*)p_gen;
  • int형 변수 a의 주소를 제네릭 포인터인 p_gen에 저장했다.
  • 제네릭 포인터를 통해 변수 a의 값인 10에 접근하기 위해서 *p_gen을 통해 역참조한 것이 아니라, 한 번 (int*) 형으로 형변환을 한 뒤, 그 이후에 역참조하게 된다.
  • 이를 통해 컴파일러는 "내가 제네릭 포인터를 통해 역참조하려고 하는데, 해당 주소에서 4byte 데이터를 읽어야 겠구나."라고 알고, 4byte 만큼의 데이터를 읽어 오게 된다.

 

1-3. 제네릭 포인터 사용 예시 (C++언어)

int a = 10;
void* p_gen = &a;

// C++ 스타일의 권장 방식
int b = *static_cast<int*>(p_gen);

'C++' 카테고리의 다른 글

C++ 스트림 (Stream)  (0) 2026.01.27
C++ Programming Basic Structure (1)  (0) 2026.01.25
C++ namespace  (0) 2026.01.25