[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 |