이 글의 출처가 변형되어 돌아다니고 있는데. 원 출처는 당 블로그 티루트입니다...
... 는 아니고, 삼성소프트웨어멤버십 선배님인 규환님 강의중 개인 노트한 것을 옮긴 것입니다.
수차례 블로그 이사를 다니던 글이고 복구를 완료했습니다.
int *(*(*pa[4])[3][2])[4];
// 몇 바이트 짜리냐? 16바이트다. 맨 안쪽을 주의.
int u=fun("armina", 4)(10,5);
// int (*)(int, int) 를 리턴하는 함수로 위 함수가 가능하다.
int (*)(int,int) fun(char *, int);
// 원리상 맞으나 에러난다. –> 아래처럼 최초 * 괄호 안에 실체를 다시 써줘야 한다.
밍
int (* fun(char *, int))(int, int);
// signal 함수 유형을 주목하라.
int const *pa; // 번지가 상수다
int *const pa; // 버퍼가 상수다.
int const * const pa ; // 둘다 상수다.
int * const *pa[4];
int const **pa[4];
int **constpa[4];
// 유형별 예제
int *pa, a[4], *pa[4], a[2][3], (*pa)[3];
int a[4][5], (*pa[3])[5], (**pa)[5];
int (*pa[4][3])[5], (*(*pa)[3][5];
int p[4][3][7], (*pa)[3][7];
int *pa[2][3], *(*pa)[3], *(*pa[2])[3]; // 모두 다 같은 개념.
int *(**pa)[3], *(*pa[4][5])[3];
int *(*(*pa)[5][3];
int fun(int,int);
int *fun(int, int);
int **fun(int, int);
int (*fun)(int, int);
int *(*fun)(int, int);
int (*fun[4])(int, int);
int (**fun)(int, int);
int (*fun[3][2])(int, int);
int (*(*fun)[2])(int, int);
int (*fun(int(*)[3], int**);
int (*funt(int, int))[3][2]);
int const *pa, *const pa;
int fun (int, …);
// (…) 괄호안에 있는 것은. 실체를 의미한다. 밖에 있는 것은 속성을 의미한다.
int (*pa)[3] // 2차원 배열 = 3개짜리 포인터의 배열.
int *pa[4] // 를 찍을 수 있는 포인터는 int **pa
int (*pa[3])[5] // 를 찍을 수 있는 포인터는 (**pa)[5]