728x90
반응형
오늘은 C언어의 자료 표현 방식 중 반드시 기본으로 알아야 할
'배열' 에 대해 알아보고자 한다.
1. 배열의 개념
- 배열은 종류가 같은 여러개의 데이터를 순차적으로 나열한 것이다.
- 정수(int), 문자(char), 부동소수(double) 뿐 아니라 구조화 타입의 배열도 허용한다.
2. 배열의 특성
- 인덱스 범위(index range)가 존재하며 이 범위를 넘게 되면 에러가 발생한다.
- 배열의 크기는 선언 시 명세하며, 이 크기는 불변하다. (크기 = 길이)
- 배열의 lower bound는 항상 0이다. upper bound는 최소 lower bound의 +1 이다.
- 배열의 선언과 초기화가 동시에 가능하다.
예) int a[100]={0} //배열 a를 선언과 동시에 0으로 초기화
3. 배열의 선언
- 대괄호([ ])와 함께 표기
- 일반 변수와 같은 형식으로 선언한다.
예) 정수 배열 선언 – int A[100];
A [0] [1] … [100]
4-1. 배열의 표현 - 2차원 배열
- 행(row)과 열(column)을 표현하는 2개의 인덱스로 명세
예) int a[2][3];
열1 | 열2 | 열3 | |
행1 | a[0][0] | a[0][1] | a[0][2] |
행2 | a[1][0] | a[1][1] | a[1][2] |
- 배열의 선언과 초기화가 동시에 가능하다.
예) int a[2][3]={{1, 2, 3}, {4, 5, 6}}
4-2. 배열의 표현 - 3차원 배열
- 면(plane), 행(row), 열(column)을 표현하는 3개의 인덱스로 명세
예) int a[2][2][3]; => "행(2)과 열(3)로 표현되는 2개의 면(0~1)이 존재"
열1 | 열2 | 열3 | |
행1 | a[0][0][0] | a[0][0][1] | a[0][0][2] |
행2 | a[0][1][0] | a[0][1][1] | a[0][1][2] |
면[0]
열1 | 열2 | 열3 | |
행1 | a[1][0][0] | a[1][0][1] | a[1][0][2] |
행2 | a[1][1][0] | a[1][1][1] | a[1][1][2] |
면[1]
4-3. 배열의 표현 - 구조(struct)
- 배열의 구조체는 Struct Data Type이라고도 한다.
- 종류가 다른 데이터들끼리 그룹 지어 처리가 가능하다. (일반 배열과 차이점)
- 사용자가 직접 데이터 타입을 정의할 수 있다.
예)
struct example { //구조체 정의
int age;
double time;
char name[10];
};
struct example s1; //정의된 구조체 데이터 타입으로 변수 선언
- 구조체끼리는 단순 비교가 불가능하다. 어떤 데이터를 비교하는 것인지 알 수 없기 때문!
예) a>b (X)
4-3. 배열의 표현 - 순차 리스트
- 물리적 메모리 공간에 연속적으로 저장된다.
- 물리적 순서 = 논리적 순서
- 배열을 이용한 순차리스트 장단점
[장점] -표현이 간단함
-접근이 빠르다. 인덱스는 직접 메모리 주소로 변환할 수 있기 때문
[단점] -임의의 위치에 대한 삽입, 삭제 비용이 크다.
삽입, 삭제시에 후속 원소들을 한 자리씩 밀거나 당겨야 함 -> 오버헤드 발생
-순차적으로만 표현할 수 있다.
-자료의 크기가 미리 정의되어야 한다.
-메모리 내 저장 공간 전체가 한 번에 할당되고, 한 번에 회수된다.
지금까지 C언어에서의 배열의 개념과 특성을 알아보았다.
배열 구조는 가장 기본적인 자료 구조이니 표현 방식을 알아두는 것이 좋다.
한 가지 걸리는 것이 있다면, C언어의 배열 구조의 약점과 한계를 극복하기 위해 어떻게 해야할까.
이럴 때 연결 리스트(포인터)의 개념이 필요하다.
다음에는 연결 리스트 구조와 동적 할당에 대해 알아보도록 하자.
이 글은 C언어를 활용한 자료 구조의 복습을 위해 개인적으로 작성한 글입니다.
반응형
'Programming Languages > C,C++' 카테고리의 다른 글
[C언어/자료구조] 포인터 - 연결 리스트 (Linked List) 개념 총 정리 / 배열과 차이점? (0) | 2023.05.22 |
---|