Programming/C
포인터 읽기
Ronie.Kang
2008. 5. 23. 11:15
일전에 비슷한 글을 읽은 적이 있습니다.
다중 포인터를 쉽게 읽는 방법이라는 글이었는데..
도통 기억이 나지 않는군여. 여튼 각설하고
제가 종종 들려 이것 저것 훔쳐 오는
http://www.troot.co.kr/trbbs/zboard.php?id=newgal&no=1427
에서 담아 옵니다.
트랙백을 찾다 못 찾았습니다.
최초 작성자는
http://blog.cnrocks.net/ 라는 분입니다.
고운하루 되세요.!
------- 뭐. 솔직히. 실제로 이렇게 난해한 걸 쓸 줄 안다고 해서 잘난 것도 아니고. 요즘 같이 덩치가 커지는 시절에 혼자 잘났다고 짜대는 것도 문제가 있고. 경력 수년에 이르도록 헷갈리는 건 이해할 수 있지만. 그렇다고 도무지 개념없이 버티는 양반들도 있고. 여튼. 예전 노트 발췌. 중간에 상수값을 보면. 출처를 알 수 있음. 흐. 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] |