|
2차원 배열을 포인터로 핸들하기 위해
2차원 배열을 가리키는 포인터 변수를 선언한 것입니다.
전 그냥 간단히 소개만 하겠습니다.
책을 보면 아~! 하지만 돌아서면 어!!?? 하기 때문입니다...
"터보C정복"과 다른 포인터 관련 책에서 본 내용입니다.
변수선언
포인터 변수선언
포인터 변수에 변수의 주소 할당
변수 엑세스 방법
int i;
int *pi;
pi = &i;
*pi
int i[3];
int *pi;
pi = i; 또는 pi = &i[0];
*(pi+n)
int i[3][2];
int (*pi)[2];
pi = i; 또는 pi = &i[0];
*(pi[n]+m)
int i[3][2][2];
int (*pi)[2][2];
pi = i; 또는 pi = &i[0];
*(pi[n][m]+h)
다차원 배열을 포인터로 다루는 이유 4가지
1. ++, -- 등의 연산자를 사용하기 위해
2. 연산 속도가 빠르며 기계어 코드가 간결하기 때문에
3. 매개변수가 다차원 배열인 함수를 작상하기 위해
4. 다차원 배열을 일차원 배열로 다루기 위해
(3번이 가장 유력한 이유)
예) 2차원 배열을 주고 받는 함수
#include <xxx.h>
void func(int (*a)[3]);
void main()
{
int x[4][3];
....
func(x); // or func(&x[0]);
}
void func(int (*a)[3])
{
... *(a[0]+0) ... // 2차원 배열의 첫번째 요소 엑세스
}
참고로...
int *ptr[4]; or int *(ptr[4])
은 요소 4개를 가진 포인터 배열입니다(8바이트(2X4) 차지)
int (*ptr)[4];
은 열의 요소 개수가 4인 이차원 배열을 가르키는 포인터 변수입니다(2바이트 차지)
|