반응형

앞서 함수포인터에 관해 설명했다.

함수포인터에서 input 매개변수와 반환형 타입정보가 반드시 들어가야 된다고 설명했다.

https://ansan-survivor.tistory.com/1291

 

[C언어] 함수포인터 (함수형 포인터) 이해하기 예제

C언어의 함수에 관해서는 이전 포스팅에서 설명했다. https://ansan-survivor.tistory.com/1224 [C언어] C언어 함수 만들기, 함수 구조, 함수 템플릿, 함수 작동 순서 C언어 함수의 구조는 [return 타입] 함수명(.

ansan-survivor.tistory.com

 

그러나 함수포인터의 한종류지만, 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 = &num;				// ptr포인터에 num의 주소값을 저장 (그러나 int형 type은 못따라온다)
	printf("%p \n", ptr);	// ptr이 가리키는 주소값 출력

	ptr = func;				// void 포인터에 함수포인터도 저장이 가능하다!!!!!
	printf("%p \n", &ptr);	//	ptr자체의 주소값.

	return 0;
}
반응형

프로그램을 실행시켜보면 아래와 같다.

특정 값 num의 주소가 저장이 가능하며, 함수인 func( )의 주소 또한 저장이 가능하다.

즉, 타입(type)에 구애받지 않고 어떠한 주소도 다 담을 수 있다. 다시말해 그저 해당 주소를 향해 가리키는 역할만 한다.

(결과)

void * ptr은 그 내부에 타입 상관없이 포인팅 가능.

 

반응형

+ Recent posts