다음과 같이 선언되는 포인터 변수를 가리켜 'void형 포인터 변수'라 한다.
void * ptr;
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) 정보도 담겨있지 않으므로 이는 당연한 것이다.
그래서 void형 포인터는 다음 상황 또는 다음과 유사한 형태의 전략이 필요한 경우에 유용하게 사용된다.
"일단 주소 값에만 의미를 두고, 포인터의 형은 나중에 결정한다."
참고로 이와 유사한 상황은 이후에 '메모리의 동적 할당'과 매우 깊은 관계가 있다. 즉 '메모리의 동적 할당'을 잘 이해하려면 이러한 void형 포인터의 존재를 알고 있어야 한다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[열혈 C 프로그래밍] 도전! 프로그래밍2 - 도전3 (0) | 2022.12.29 |
---|---|
[열혈 C 프로그래밍] 도전! 프로그래밍2 - 도전1 (0) | 2022.12.29 |
[열혈 C 프로그래밍] 적절한 함수 포인터 변수의 선언 (0) | 2022.12.28 |
[열혈 C 프로그래밍] Chapter03 문제 (0) | 2022.12.16 |
[열혈 C 프로그래밍] 키보드로부터의 데이터 입력과 C언어의 키워드 (0) | 2022.12.16 |