336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 

1. 함수를 가르키는 특수한 함수

2. 함수이름자체도 주소값을 가지고있다.

3. 반환형태와 매계변수를 같게 하고  (*이름) 형식으로 만들수 있다.


목표 : 

기존 소스를 활용하여 Process 함수를 FunctionPointer 함수로 가르키고 하고 사용해본다.


소스코드 : main.c

#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)

{

//< 함수 포인터 추가

void(*FunctionPointer)(void*);


FunctionPointer = Process;//함수포인터 값 대입


 //< 데이터를 선언

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;


FunctionPointer(pInput);


pInput = (void*)&Data2;


FunctionPointer(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언어입문, #프로그램입문, #함수포인터


+ Recent posts