1차원 배열은 인덱스를 하나만 사용하는 배열이다. 원소 순서를 한 개의 값으로 구별할 수 있는 간단한 선형 리스트는 1차원 배열을 사용하여 표현할 수 있다. [표 3-4]와 같이 분기별 노트북 판매량에 대한 리스트를 생각해보자. 1/4~4/4 분기 판매량을 순서대로 관리해야 하므로, 분기 순서대로 값을 나열하는 선형 리스트로 표현할 수 있다.
[표 3-4]를 1차원 배열을 사용하여 선형 리스트로 표현하면 [그림 3-9]와 같다. 1차원 배열 sale은 int 자료형으로 선언되었으므로 각 원소의 길이는 4바이트이다. C프로그래밍에서 배열의 인덱스는 0부터 시작하므로 배열 sale에서 각 원소의 위치는 시작 주소가 a일때 a+(원소의 배열 인덱스x4바이트) 가 된다.
<aside> ❗ NOTE_ 배열에서 첫 번째 원소의 인덱스는 0이고, 두 번째 원소의 인덱스는 1이고, i번째 원소의 인덱스는 (i+1)이다. 따라서 원소 크기가 l일 때, i번째 원소의 시작 주소는 'a +(원소의 배열 인덱스xl) = a + ((i-1)xl)'이 된다.
</aside>
[ 예제 3-1 ]은 분기별 판매량 선형 리스트를 1차원 배열로 구현하고, 논리적 순서와 물리적 순서가 일치하는 순차 구조인지 확인하는 프로그램이다.
#include <stdio.h>
void main() {
int i, sale[4] = {157, 209, 251, 312};
for (i = 0; i < 4; i++) {
printf("\\n address : %u sale[%d]= %d", &sale[i], i, sale[i]);
}
getchar();
}
07행 : 배열 원소의 메모리 주소(&sale[i])를 %u 형식으로 출력하고, 원소값(sale[i])을 %d 형식으로 출력한다. 실행 결과를 보면 배열 sale의 시작 주소가 5241668이다. 이때 sale[2]의 위치를 계산해 보면 다음과 같다. 계산한 값과 결과 실행 결과로 나온 주소가 일치하므로, 논리적인 순서대로 메모리에 연속하여 저장된 걸 확인할 수 있다.
시작 주소 + (인덱스 x 4바이트)
= 5241668 + ( 2 x 4바이트 )
= 5241676