char T[]="하이"; // 문자 자체가 주소
Symbol Table
cinst char | 이름X | 주소 |
반환형 | 함수의 이름 | 매개변수 |
void | add | (int a, int b) |
{ | ||
return a+b; | // 값의 반환 | |
} |
test(); // test;<-test자체가 함수의 주소
// void test(); // test의 타입 추출(함수의 추출방식)
// void ();
// void ()();
// void (*)();
int (*test())(const char *, ...); // test함수의 원형
int (*(*)())(const char *, ...);
int (*(*tp)())(const char *, ...); // tp 포인터 선언<-가장 어려운 함수포인터
int (*test())(const char *, ...) // printf를 반환하는 함수 (*)<-자리에 변수이름
{
return printf;
}
int (*test())(const char *, ...); // test함수의 원형
int (*(*)())(const char *, ...);
int (*(*tp)())(const char *, ...); // tp 포인터 선언<-가장 어려운 함수포인터
{
return printf;
}
예제
#include <stdio.h>
int main(void)
{
// void test(); // test의 타입
// void ();
// void ()();
// void (*)();
// void (*tp)(); // 메인함수에서 실제 호출 방식
// int main();
// int ();
// int ()();
// int (*)();
// int (*tp)();
// int printf(const char *, ...); // == int scanf(const char *, ...)
// int (const char *, ...);
// int ()(const char *, ...);
// int (*)(const char *, ...);
// int (*tp)(const char *, ...);
// void (*tp)();
// tp=test; // tp==4byte(tp는 포인터가 되므로 4byte)
// tp(); // ==test();
// *(tp)(); // ==test();
int iNum;
int (*tp)(const char *, ...);
tp=scanf;
tp("%d", &iNum);
tp=printf;
tp("iNum = %d\n", iNum);
/* printf와 scanf의 함수선언 형태가 비슷하므로 하나의 함수추출 방식으로 둘다 사용 가능
char iNum[10];
int (*tp)(const char *, ...);
tp=scanf;
tp("%s", &iNum);
tp=printf;
tp("%s\n", iNum);
*/
return 0;
}
댓글 없음:
댓글 쓰기