void * ptr; 이것을 가리켜 void형 포인터 변수라 한다.
void형 포인터 변수는 무엇이든 담을 수 있는 바구니에 비유할 수 있다. void현 포인터 변수에는 어떠한 변수의 주소 값이든 잠을 수 있다. 하다못해 함수의 주소 값도 담을 수 있다.
아래의 예제를 살펴보자.
#include<stdio.h>
void SoSimpleFunc(void) {
printf("I'm so simple");
}
int main(void) {
int num =20;
void *ptr;
ptr = # // 변수 num의 주소 값 저장
printf("%p \n", ptr);
ptr = SoSimpleFunc; // 함수SoSimpleFunc의 주소 값 저장
printf("%p\n", ptr);
return 0;
}
위의 예제에서 보이듯이 무엇이든 담을 수 있으니 좋게만 느껴 질수도있다. 하지만 단점도 있다.
void형 포인터 변수를 가지고는 아무런 포인터 연산을 하지 못한다. 값의 변경이나 참조도 불가능 하다. void형 포인터 변수에는 가리키는 대상에대한 어떠한 형(Type) 정보도 담겨있지 않으므로 이는 당연한 것이다. 따라서 아래의 코드를 실행하면 오류가 난다.
int main(void) {
int num = 20;
void * ptr = #
*ptr = 20; // 컴파일 에러
ptr++; // 컴파일 에러
. . .
}
그래서 이러한 void형 포인터 변수는 "일단 주소값에만 의미를 두고, 포인터의 형은 나중에 결정"할때 사용을 하게되며, '메모리의 동적 할당'과 매우 깊은 관계가있다.
'C' 카테고리의 다른 글
C언어 가위 바위 보 게임 만들기(Rock Paper Scissors GAME) (2) | 2014.07.22 |
---|---|
C언어 배열 90도씩 회전시켜 출력하기 (0) | 2014.07.20 |
C언어 함수 포인터 변수 (0) | 2014.07.18 |
C언어 '포인터 배열'과 '배열 포인터'의 차이점 (0) | 2014.07.16 |
C언어 다차원 배열 - 3차원 배열 (2) | 2014.07.02 |