프로그래밍/자료구조설계
void*
youjin.A
2015. 10. 23. 07:37
void*
void포인터는 어떤 타입의 포인터든 다 받을 수 있는 포인터이다.
받는 것은 어떤 포인트형이든 다 받을 수 있다.
그런데 그 포인터에 접근할 때는 해당 포인트의 자료형에 맞에 접근해야 한다.
한마디로, 주소값이 void*에 들어갈때는 자유로우나 나올때는 알맞게 접근해야한다.
다음 예제를 보면 알기쉽다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main(){ void* ptr; int i = 7; float f = 23.5; ptr = &i; printf("%d\n", *((int*)ptr)); ptr = &f; printf("%f\n", *((float*)ptr)); return 0; } | cs |
10줄과 13줄에 포인터가 int*와 float*f 로 형변환 시켜서 포인터에 접근한 것을 확인할 수 있다.
형변환 해주지 않으면 에러가 나서 컴파일이 안된다.