반응형
앞서 함수포인터에 관해 설명했다.
함수포인터에서 input 매개변수와 반환형 타입정보가 반드시 들어가야 된다고 설명했다.
https://ansan-survivor.tistory.com/1291
그러나 함수포인터의 한종류지만, Void포인터는 타입(Type)이 존재하지 않는 Void 포인터 이다!
결론 부터 말하자면 void 포인터는 아래와 같이 선언한다.
=> void * ptr;
- void 포인터로 선언한 이 ptr은 그 어떠한 주소값도 다 저장이 가능하다.
- Type정보가 존재하지 않기 때문에 Type을 신경쓰지 않고 해당 주소값을 저장 가능.
- 타입 정보가 존재하지 않아서 을 사용하는 연산은 불가
예시)
#include <stdio.h>
/*
모든 주소값을 저장할 수 있는 void 포인터, (type정보 필요없음, 오직 주소만 저장)
type(자료형) 이 존재하지 않기 때문에, *연산은 불가능하다.
선언방법: void * ptr;
*ptr = 3.14 ; 이러한 연산은 불가능하다. 왜냐하면, 자료형을 모르기 때문이다.
ptr++; 이러한 연산도 불가능하다. 자료형을 몰라서.
*/
// void이므로 return이 필요 없음.
void func(void)
{
printf("Nothing to do\n");
}
int main()
{
int num = 20;
void* ptr; // void 포인터 선언.
ptr = # // ptr포인터에 num의 주소값을 저장 (그러나 int형 type은 못따라온다)
printf("%p \n", ptr); // ptr이 가리키는 주소값 출력
ptr = func; // void 포인터에 함수포인터도 저장이 가능하다!!!!!
printf("%p \n", &ptr); // ptr자체의 주소값.
return 0;
}
반응형
프로그램을 실행시켜보면 아래와 같다.
특정 값 num의 주소가 저장이 가능하며, 함수인 func( )의 주소 또한 저장이 가능하다.
즉, 타입(type)에 구애받지 않고 어떠한 주소도 다 담을 수 있다. 다시말해 그저 해당 주소를 향해 가리키는 역할만 한다.
(결과)
반응형
'C언어 \ C++ > 포인터 \ 배열' 카테고리의 다른 글
[C언어] 구조체(struct)에 포인터 변수 선언, 사용방법 ( -> 연산자) (0) | 2022.03.05 |
---|---|
[C언어] 함수포인터 (함수형 포인터) 이해하기 예제 (0) | 2022.02.20 |
[C언어] 포인터 배열, 이중포인터 배열 예제 (배열 내 포인터값을 사용할 경우) (0) | 2022.02.19 |
[C언어] 포인터의포인터(더블포인터) Swap함수 예제 (0) | 2022.02.19 |
[C언어] 포인터의 포인터 (더블 포인터, 이중 포인터, 삼중 포인터) 이해하기 예제 (2) | 2022.02.19 |