티스토리 뷰
이전 글: 4. 포인터와 배열에서 계속
다차원 배열
int[행][열]
2차원 배열도 메모리상에는 1차원 형태로 존재한다.
포인터의 포인터 = 더블 포인터 변수
포인터를 가리키는 값
int n = 3;
int *p = &n;
int **pp = &p;
(예: 포인터 변수를 이용한 Swap) (p.364)
포인터 배열과 포인터 배열의 포인터 형
int * arr[3] = {p1, p2, p3}; // int형 포인터를 인자로 가지고 있는 배열
int **ptr = arr; // int형 포인터를 가리키는 포인터 (더블 포인터)
다중 포인터가 왜 필요한가?
- 자료구조를 공부하다 보면 완전 필요하다
- 함수 내에서 함수 외부에 선언된 변수에 접근하는 방법을 제시해준다.
다차원 배열과 포인터
2차원 배열이름의 포인터 형
행/열로 나누었을 때 첫 번째 행을 가리킨다.
2차원 배열의 포인터를 결정할 때에는 다음 정보를 포함해야 한다.
- 가리키는 대상은 무엇인가?
- 배열이름(포인터)를 대상으로 값을 1 증가 및 감소 시 실제로는 얼마가 증가 및 감소하는가?
int arr[3][4];
- arr이 가리키는 것은 int형 변수
- arr값을 1증가하면, sizeof(int) x 4 크기만큼 주소값이 증가하는 포인터 형
즉, 포인터 연산 시 sizeof(int) x 4 크기 단위로 값이 증가 및 감소하는 포인터 형
다음과 같이 정의한다.
int (*ptr) [4]; // 배열 포인터 변수
--- ------- ----
A B C
A = int를 가리키는,
B = 포인터 변수
C = 포인터 연산 시 4칸식 건너뜀
!!! 주의
'배열 포인터'와 '포인터 배열'을 혼동하지 말자.
int * arr[4]; // 포인터 배열 : int형 포인터 변수로 이루어진 int형 포인터 배열
int (*arr) [4]; // 배열 포인터 : 열이 4개인 int형 2차원 배열을 가리키는 포인터 변수
2차원 배열의 포인터를 매개변수로 전달하기
void show(int arr[][4]);
void show(int (*arr)[4]);
2차원 배열의 행의 개수
int arr[ROW][COLUMN]
sizeof(arr) / sizeof(arr[0])
아래 값은 모두 동일하다.
arr[2][1]
(*(arr+2))[1]
*(arr[2]+1)
*(*(arr+2)+1)
즉, arr[i] = *(arr + i)
다음 글: 6. 함수 포인터와 void 포인터
반응형
댓글
공지사항