BackEnd/포인터 / / 2015. 6. 29. 20:44

void 포인터

반응형

void 포인터

void 포인터는 어떤 타입의 데이터도 참조할 수 있는 범용 포인터입니다.

1. void 포인터는 char 포인터와 같은 표현과 메모리 정렬 방법을 사용한다.

2. void 포인터는 다른 포인터와 절대 같지 않다. 하지만 NULL 값이 할당된 두개의 void 포인터는 서로 같다. void 포인터의 실제 동작은 시스템에 의존적이다.

모든 포인터는 void 포인터에 할당될 수 있으며, 할당된 포인터는 다시 원래의 타입으로 캐스팅하여 사용할 수 있다. 원래의 타입으로 캐스팅이 일어나면 포인터의 값은 기존 값과 같게 된다.

다음의 코드를 보면 정수 포인터가 void 포인터에 할당되고 다시 원래의 정수 포인터에 할당된다.

1
2
3
4
5
6
7
int num;
int *pi = #
printf("value of pi : %p\n", pi);
void* pv = pi;
pi = (int*)pv;
printf("value of pi : %p\n", pi);
 
cs

위 코드가 실행되면 

value of pi : 100

value of pi : 100

다음과 같이 같은 포인터의 주소가 출력된다. (임의의 주소 100번지)

void 포인터는 데이터 타입의 포인터에 사용되며, 함수 포인터에는 사용되지 않는다.

※ void 포인터 사용 시 주의
임의의 포인터를 void 포인터로 캐스팅한 후, 기존 타입이 아닌 전혀 다른 타입의 포인터로 캐스팅하더라도 이를 막을 방법이 없다.

void 포인터에 sizeof 연산자가 사용될 수 있다. 그러나 void 자체는 sizeof 연산자를 사용할 수 없다.

1
2
3
4
size_t size = sizeof(void*); //valid
size_t size = sizeof(void); //not valid
 
 
cs



참고문헌 : C 포인터의 이해와 활용. 리처드 리스 저


반응형

'BackEnd > 포인터' 카테고리의 다른 글

[포인터 관련 데이터 타입] intptr_t와 uintptr_t  (0) 2015.06.29
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유