// 일정이 있어서 잘라서 노트를 정리해야겠다.
지금까지 포인터를 배우면서 우리는 한가지 결론을 지겹도록 말했다.
배열의 이름은 포인터이다.
그렇다면, 이건 다차원 배열에서도 통한다는 뜻이다. 그래서 이번 8번째 정리에서는 다차원 배열과 포인터에 관해 공부해보자.
2차원 배열이름의 포인터 형
다음 배열이름의 포인터형은 뭘까?
int arr[10];
배열이름 arr는 int형 포인터이다.
그러면 다차원 배열은 뭘까? 여러 예제들을 살펴보며 이를 증명해나가보자.
다음의 2차원 배열을 통해 알아보자.
int arr[3][3];
언제나 그렇듯 배열의 이름은 제일 첫 번째의 요소를 가르킨다. 그러니 arr라는 배열이름도 arr[0][0]을 가르키는 셈이다.
또한 배열속의 요소에 접근할때 우리는 가로, 세로값을 모두 주면서 접근했다. 그런데 특이하게도 2차원 배열은 가로값만 주는, 그러니까 arr[0], arr[1], arr[2]도 의미를 갖는다. 1행, 2행, 3행의 요소를 가르킨다.
그렇다면, arr와 arr[0]은 같은걸까? 이제 예제하나 살펴보자.
#include <stdio.h>
int main () {
int arr[3][3];
printf("%p %p %p \n", arr, arr[0], &arr[0][0]);
printf("%d %d", sizeof(arr), sizeof(arr[0]));
return 0;
}
실행결과
0061FEFC 0061FEFC 0061FEFC
36 12
가르키는 것이 같다는 것은 알았지만 sizeof 연산값이 다르다. 2차원 배열 전체를 sizeof연산을 하면 전체 크기를 반환하지만, arr[0], 즉 행을 sizeof연산을 하면 그 행의 크기를 반환하게 된다.
이를 통해 arr와 arr[0]은 다른 것이라는 것을 알 수 있다.
'Language > C' 카테고리의 다른 글
포인터(9) (0) | 2021.09.06 |
---|---|
포인터(8) - 下 (0) | 2021.09.05 |
포인터 (7) + 간단한 문제풀이 (0) | 2021.09.02 |
포인터(6.5) (0) | 2021.09.01 |
포인터(6) (0) | 2021.08.31 |