이처럼 배열의 이름은 곧 자신 배열의 첫 번째 인덱스 주소 값과 같습니다. 큰 범위 배열 관점에서 배열의 이름이 a라면, 한 단계 작은 범위의 배열 관점에서는 a[0]과 a[1] 이렇게 두 개의 배열 이름을 가집니다. 앞으로 “배열 이름은 곧 주소다”라고 생각하면 코드를 이해하기 쉬울 것입니다.
이제 다음 예제 코드를 통해 2차원 배열과 주소의 상관 관계를 직접 확인해 봅시다.
pointer2_3.c
#include <stdio.h> main() { int a[2][3] = { 1, 2, 3, 4, 5, 6 }; // 2차원 정수형 배열 선언과 동시에 초기화 printf("배열 a 시작 메모리 주소는 %d\n", a); // 배열의 이름 printf("배열 a에 포함된 첫 번째 배열의 시작 주소는 %d\n", a[0]); // {1, 2, 3}을 의미 printf("배열 a 시작 메모리 주소는 %d\n", &a[0][0]); printf("배열 a에 포함된 두 번째 배열의 시작 주소는 %d\n", a[1]); printf("배열 a에 포함된 두 번째 배열의 시작 주소는 %d\n", &a[1][0]); printf("\n"); printf("배열 a의 크기는 %d 바이트\n", sizeof(a)); printf("배열 a에 포함된 첫 번째 배열의 크기는 %d바이트\n", sizeof(a[0])); printf("배열 a에 포함된 두 번째 배열의 크기는 %d바이트\n", sizeof(a[1])); }
실행 결과
배열 a 시작 메모리 주소는 3864392
배열 a에 포함된 첫 번째 배열의 시작 주소는 3864392
배열 a 시작 메모리 주소는 3864392
배열 a에 포함된 두 번째 배열의 시작 주소는 3864404
배열 a에 포함된 두 번째 배열의 시작 주소는 3864404
배열 a의 크기는 24 바이트
배열 a에 포함된 첫 번째 배열의 크기는 12바이트
배열 a에 포함된 두 번째 배열의 크기는 12바이트