C언어: 다차원 배열의 심화 해석
2차원 배열을 예로 들면, 첫번째 차원은 배열 포인터로 해석 가능하다.
ex) int arr[3][4]
가 있으면
arr
는 4칸짜리 int
배열들을 가리키는 배열 포인터의 배열이다.
*(arr+i)
에서 i
는 첫번째 차원의 index에 해당한다.
결과는 arr[i]
(정확히는 &arr[i]
), 즉 4칸짜리 배열 3개(0~2번째)중 i
번째의 주소다.
따라서 배열 요소를 이렇게 접근할 수도 있다.
arr[m][n] == *(*(arr+m)+n)
기술적으로 정확한 해석
arr
-> int (*) [n]
형을 가지는 배열 포인터 반환
arr[0]
-> 첫 번째 배열 포인터가 가리키는 int
형 배열이 int*
형을 가지는 포인터로 decay된다.
arr[0]
은 arr
이라는 2차원 배열의 0번째 행이라는 1차원 배열의 포인터를 전달한다.
2차원 배열을 이용한 문자열들의 배열
2차원 배열은 기본적으로 ‘배열들의 배열’이다. 따라서, 문자열들의 배열로 활용 가능하다
Ex)
char planets[][8] = {"Mercury", "Venus", "Earth",
"Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};