void
포인터 사용법void
포인터는 어떤 데이터 타입도 가리킬 수 있는 포인터로, C++에서 매우 유용하게 사용됩니다. void
포인터는 특정 데이터 타입을 가리키지 않기 때문에 형변환을 통해 원하는 타입으로 변환해야 합니다. 이번 포스트에서는 void
포인터의 사용법과 예제를 살펴보겠습니다.
#include <iostream>
using namespace std;
int main()
{
// 첫 번째 블록: `void` 타입 변수 선언 불가
{
// `void` 타입 변수는 선언할 수 없습니다.
// void p; // 컴파일 오류 발생
}
// 두 번째 블록: `void` 포인터의 기본 사용법
{
int num = 10; // 정수형 변수 선언 및 초기화
int* p = # // 정수형 포인터 p에 num의 주소값 저장
// `void` 포인터는 어떤 데이터형도 가리킬 수 있습니다.
void* vp = p; // 정수형 포인터 p를 `void` 포인터 vp로 변환
// `void` 포인터는 데이터형을 알 수 없기 때문에 직접적으로 역참조할 수 없습니다.
// cout << *vp << endl; // 컴파일 오류 발생
// `void` 포인터를 원래의 데이터형으로 변환하여 사용해야 합니다.
p = (int*)vp; // `void` 포인터 vp를 정수형 포인터 p로 변환
}
// 세 번째 블록: `void` 포인터와 배열
{
int nums[] = { 1, 2, 3 }; // 정수형 배열 선언 및 초기화
void* vp = nums; // 배열의 첫 번째 요소를 `void` 포인터로 변환
// `void` 포인터는 직접적으로 배열 요소에 접근할 수 없습니다.
// cout << *(vp + 1) << endl; // 컴파일 오류 발생
}
// 네 번째 블록: 동적 메모리 할당에서의 `void` 포인터 사용
{
// `malloc` 함수는 지정된 크기의 메모리를 동적 할당하며, `void*` 타입으로 반환합니다.
// 이 예제에서는 정수형 3개의 크기만큼 메모리를 할당합니다.
int* p = (int*)malloc(sizeof(int) * 3); // 동적 메모리 할당 및 `void` 포인터를 정수형 포인터로 변환
// 동적 할당된 메모리는 반드시 해제해야 합니다.
// `free` 함수는 모든 타입의 동적 할당된 메모리를 해제할 수 있습니다.
free(p); // 메모리 해제
}
return 0;
}
void
타입 변수 선언 불가첫 번째 블록에서는 void
타입 변수를 선언할 수 없음을 보여줍니다.
{
// `void` 타입 변수는 선언할 수 없습니다.
// void p; // 컴파일 오류 발생
}
void
는 데이터 타입이 없음을 의미하므로 변수로 선언할 수 없습니다.void
포인터의 기본 사용법두 번째 블록에서는 void
포인터의 기본 사용법을 설명합니다.
{
int num = 10; // 정수형 변수 선언 및 초기화
int* p = # // 정수형 포인터 p에 num의 주소값 저장
// `void` 포인터는 어떤 데이터형도 가리킬 수 있습니다.
void* vp = p; // 정수형 포인터 p를 `void` 포인터 vp로 변환
// `void` 포인터는 데이터형을 알 수 없기 때문에 직접적으로 역참조할 수 없습니다.
// cout << *vp << endl; // 컴파일 오류 발생
// `void` 포인터를 원래의 데이터형으로 변환하여 사용해야 합니다.
p = (int*)vp; // `void` 포인터 vp를 정수형 포인터 p로 변환
}
void
포인터는 어떤 데이터 타입도 가리킬 수 있습니다.void
포인터는 직접적으로 역참조할 수 없으므로, 원래의 데이터 타입으로 형변환해야 합니다.void
포인터와 배열세 번째 블록에서는 void
포인터와 배열의 관계를 다룹니다.
{
int nums[] = { 1, 2, 3 }; // 정수형 배열 선언 및 초기화
void* vp = nums; // 배열의 첫 번째 요소를 `void` 포인터로 변환
// `void` 포인터는 직접적으로 배열 요소에 접근할 수 없습니다.
// cout << *(vp + 1) << endl; // 컴파일 오류 발생
}
void
포인터는 배열의 첫 번째 요소를 가리킬 수 있지만, 직접적으로 배열 요소에 접근할 수 없습니다.void
포인터 사용네 번째 블록에서는 동적 메모리 할당에서 void
포인터의 사용법을 설명합니다.
{
// `malloc` 함수는 지정된 크기의 메모리를 동적 할당하며, `void*` 타입으로 반환합니다.
// 이 예제에서는 정수형 3개의 크기만큼 메모리를 할당합니다.
int* p = (int*)malloc(sizeof(int) * 3); // 동적 메모리 할당 및 `void` 포인터를 정수형 포인터로 변환
// 동적 할당된 메모리는 반드시 해제해야 합니다.
// `free` 함수는 모든 타입의 동적 할당된 메모리를 해제할 수 있습니다.
free(p); // 메모리 해제
}
malloc
함수는 지정된 크기의 메모리를 할당하고, 이를 void
포인터로 반환합니다.free
함수를 사용하여 해제해야 하며, free
함수는 void
포인터를 매개변수로 받습니다.