[C] void 포인터

2021. 1. 6. 17:26프로그래밍 공부/C 공부

포인터가 전달한 데이터의 자료형을 void로 설정할 수 있다.

이것이 의미하는 것은 어떤 자료형을 받을지 모른다는 것인데, 이때 형변환을 하지 않으면 포인터가 데이터를 받지 못하는 오류가 발생한다. 

void *p ;
*p = 5 ; // 오류 출력 :대상 메모리의 크기가 지정되지 않음.

따라서 형변환 (int *) 등을 적용해줘야하는데 다음과 같은 형태이다.

void *p ;
*(char *)p = 5; 

그렇다면 포인터가 전달할 데이터의 자료형을 void로 두는게 어떤 이득이 있을까? 

어떤 자료를 받을지 모를때 유용하게 사용될 것이다.

아래 AssignType 함수는 switch문과 if ~ else if 문을 활용하여 포인터에 자료형을 부여하고 있다. 

#include <stdio.h>


int AssignType(void *p, char type);


int main()
{
	int data = 0x12345678;
	char type = sizeof(data);
	printf("data의 byte 크기는%d 입니다.\n", type);
	printf("data = 0x%x\n", AssignType(&data, type));
}

int AssignType(void *p, char type)
{
	int result = 0;
	if (type == 1) {result = *(char *)p;}
	else if (type == 2) {result = *(short *)p;}
	else{result = *(int *)p;}
	return result;

'프로그래밍 공부 > C 공부' 카테고리의 다른 글

[C] scanf 함수 1  (0) 2021.01.07
[C] 문자, 문자열  (0) 2021.01.06
[C] 포인터 활용  (0) 2021.01.06
[C] 포인터 개념  (0) 2021.01.06
[C] if 조건문  (0) 2021.01.05