c언어 기초 프로그래밍 2차원 배열 이름이 가리키는 것들
c언어 기초 프로그래밍 2차원 배열 이름이 가리키는 것들
C언어의 2차원 배열 이름에 관한 이야기를 좀 해볼까 한다. 그전에 간단하게 1차원 배열 이름에 대해서 정리하고 넘어가 보자. 1차원 배열의 이름이 가리키는 것은 첫 번째 요소이며 이는 포인터와 같은 역할을 한다. 그리고 이 배열을 인자로 전달할 때 호출되는 함수에서는 포인터 변수로 받아서 배열에 접근해야 한다.
int aaa[3];
▲ 여기서 aaa 이름이 의미하는 것은 aaa[0]의 주소 값이다. 다시 말해 aaa와 aaa[0]은 같다. 하지만 2차원 배열은 그렇지가 않은데 그 과정을 정리해볼까 한다.그렇다면 2차원 배열의 이름이 가리키는 것은 무엇일까? 이도 마찬가지로 첫 번째 요소 [0][0]을 가리키는 것은 동일하다. 먼저 이 부분부터 확인해본다.
▲ 예제처럼 aaa가 가리키고 있는 주소와 aaa[0][0]의 주소가 같다. 그런데 1차원 차이점이 있는데 다음과 같은 표현이 가능하다. aaa[0], aaa[1], aaa[2] 열에 해당하는 인덱스를 입력하지 않고 첫 번째 인덱스만 입력하면 각 행의 첫 번째 요소를 가리키게 된다. 예제를 안보면 이해하기 어려운 부분이다. 예제에서 확인해보자.
▲ 앞에서 정리한 대로 인덱스를 하나만 입력하면 각 행의 첫 번째 자리를 가리킨다는 걸 확인할 수 있다. 하지만 이것들의 크기를 구하기 위해서 sizeof() 연산을 해보면 좀 다른 결과가 나오는데 예제부터 보고 결론을 정리한다.
▲ 배열 이름으로 크기를 구하면 전체 (int형 6개) 크기를 구하게 되고 첫 번째 행만 가리키는 경우에는 해당 행 전체의 크기를 반환하게 된다.
결론을 내리자면 2차원 배열 이름이 가리키는 것은 첫 번째 요소 [0][0] 이면서 배열 전체를 의미한다. 그리고 aaa[0]에서 알 수 있듯이 이는 첫 번째 행만을 의미한다. 그렇기 때문에 aaa와 aaa[0]은 서로 다르다는게 1차원 배열과의 차이점이다.