junmoyo 2017. 8. 7. 17:04

개념 : 


1. 무엇이든 가르킬수 있는 포인터


2. void 형으로는 사용할수 없으므로 항상 형변환을 화여 사용하여 줍니다.




목표 : 


매개 변수로 void 형과 타입을 받아 앞에 1바이트를 읽어 들이고 식별하여 상황에 맞게 움직이는 포인터를 만들어 보자




소스코드 : 

#include <stdio.h>

#define MAX 256

#define type_String (unsigned char)0

#define type_Integer (unsigned char)1


struct tagStruct1

{

unsigned char type;

unsigned char szBuffer[MAX];

};


struct tagStruct2

{

char type;

int nNumber;

};


void Process(void *); // 포로토 타입 선언


void main(void)

{

//< 데이터를 선언

struct tagStruct1 Data1;

struct tagStruct2 Data2;


//Data1 정의

Data1.type = type_String;

sprintf_s(Data1.szBuffer, sizeof(Data1.szBuffer), " Type1의 데이터 입니다. 어떠한 문자열을이든 저장할수 있겠군요.");


//Data2 정의

Data2.type = type_Integer;

Data2.nNumber = 38;


void *pInput = (void*)&Data1;


Process(pInput);


pInput = (void*)&Data2;


Process(pInput);


return;

}


void Process(void* pData)

{

unsigned char type = *(char*)pData;


switch (type)

{

case type_String:

puts(" tagSturct1 식별 ");

puts(((struct tagStruct1*)pData)->szBuffer);

puts("");

break;


case type_Integer:

puts(" tagSturct2 식별 ");

printf("정수 출력 : %d \n\n", ((struct tagStruct2*)pData)->nNumber);

break;


default:

break;

}

}



결과 



#c언어, #c언어입문, #프로그램입문, #void포인터