typedef 는 C코드에서 흔히 볼수 있는 말그대로 타입선언이다.
#include <stdio.h>
typedef int(*pf_Return_Int)(); // int형을 리턴하고 인자가 없는 함수의 포인터
typedef void(*pf)(); // 리턴이 없고 인자가 없는 함수의 포인터
typedef int(*ary_2)[3]; // 2차원 배열
typedef int ary_1[3]; // 1차원 배열
typedef int *iP; // 정수의 포인터
int returnInt(){
return 2;
}
void aaa(){
printf("aaa\n");
}
void bbb(){
printf("bbb\n");
}
void ccc(){
printf("ccc\n");
}
pf funcTable[3] = { aaa, bbb, ccc };
// int를 반환하고 인자가 없는 함수포인터를 인자로 받는다.
pf func(pf_Return_Int arg){
return funcTable[arg()];
}
void main()
{
int temp = 5;
iP val1 = &temp; // 값이 5인 정수변수의 주소를 포인터에 담는다.
int temp2[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ary_2 val2 = temp2; // 2차원배열을 선언하고 2차원 배열의 포인터에 담는다.
ary_1 temp3[3]; // 1차원배열의 변수를 3개 만든다. ( 2차원 배열을 만든거임 )
iP temp4 = temp2[0]; //temp2의 2차원 배열중 첫번째 행을 가리키는 포인터
printf("%d\n", *(temp4 + 2)); // 첫번째 행 {1,2,3} 중 temp4는 첫번째 방을
//가리키고 있을것이므로 2칸 이동해 3이 출력됨
// returnInt의 함수주소를 넘겨 funcTable의 2번째 인덱스의 함수를 호출한다.
func(returnInt)();
}
[함수 호출 규약] __cdecl, __clrcall, __stdcall, __fastcall, __thiscall ,__vectorcall (0) | 2023.07.25 |
---|---|
[Macro함수] 라이브러리 개발시 do while(0) 를 사용하는 이유 (0) | 2023.07.25 |
[C] printf 구현하기 (0) | 2023.07.17 |