-------
뭐. 솔직히.
실제로 이렇게 난해한 걸 쓸 줄 안다고 해서 잘난 것도 아니고.
요즘 같이 덩치가 커지는 시절에 혼자 잘났다고 짜대는 것도 문제가 있고.
경력 수년에 이르도록 헷갈리는 건 이해할 수 있지만.
그렇다고 도무지 개념없이 버티는 양반들도 있고.
여튼.
예전 노트 발췌. 중간에 상수값을 보면. 출처를 알 수 있음. 흐.
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]