컴퓨터공학/C언어

C언어 11 - 1 배열의 개념

Arkeiyou 2021. 10. 30. 13:06

용어체크

1. 배열
(Array)

  • 많은 값을 한꺼번에 저장할 수 있는 저장 장소
  • 동일한 타입의 데이터가 여러 개 저장되는 저장 장소
  • 같은 종류의 대량의 데이터를 효율적이고 간편하게 처리하는 방법

2. 배열 요소
(array element)

  • 배열을 구성하는 각 항목

3. 인덱스
(index)

  • 배열 요소의 번호

 

학습내용
  • 1. 배열의 개념
  • 2. 배열과 반복문
  • 3. 배열의 초기화
    • 배열을 사용하는 예제 실습
학습목표
  • 1. 배열의 개념을 설명할 수 있다.
  • 2. 배열과 반복문의 관계를 이해할 수 있다.
  • 3. 배열의 초기화를 알고, 사용할 수 있다.

 

 

1. 배열의 개념

 

 

1) 개요

 

변수 : 오직 하나의 값만 저장할 수 있음

 

배열 : 많은 값을 한꺼번에 저장할 수 있는 저장장소. 동일한 타입의 데이터가 여러 개 저장되는 저장장소이다. 정리하자면 같은 종류의 대량의 데이터를 효율적으로 관리할 수 있는 방법이라고 할 수 있다.

 

 

2) 배열 요소와 인덱스

 

배열 요소 또는 배열 원소 : 배열을 구성하는 각 항목이다.

인덱스, 첨자 : 배열 요소의 번호. 정수, 정수 변수, 수식 등이 가능함

배열의 크기 : 

 

 

3) 배열의 선언 

 

int scores[10];

자료형 : 배열 원소들의 타입

배열 이름 : scores

배열 크기 : 배열 원소 개수 10개

인덱스(배열 번호)는 항상 0부터 시작, 0 ~ (n-1)이다.

 

배열 선언의 예시...

 

#define 사용

기호 상수로 배열 크기를 지정할 수 있다. 배열 선언 시 배열의 크기를 기호 상수로 지정하면 수정하기가 쉽다.

 

예 :

#define SIZE 5

int b[SIZE];

 

 

 

 

 

2. 배열과 반복문

 

 

1) 배열 접근

 

잘못된 인덱스 문제 : 인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생시킨다. C에서는 인덱스가 범위를 벗어나지 않았는지 프로그래머가 확인하고 책임을 져야 한다.

 

배열의 가장 큰 장점 : 반복문을 사용하여 배열의 원소를 간편하게 처리할 수 있다는 점이다. 

 

 

 

 

3. 배열의 초기화

 

 

1) 개요

 

배열의 초기화 : 원소들의 초기값을 콤마로 분리, 중괄호 사용, 순서대로 대입

 

int a[5] = {10, 20, 30, 40, 50};

 

주의사항

 

초기값의 개수가 배열 크기보다 큰 경우 -> 오류

 

초기값의 개수가 배열의 크기보다 작은 경우 : 앞에 있는 요소들만 초기화되고, 나머지 배열 요소들은 모두 0으로 초기화된다. 이를 이용해 -> 배열의 모든 요소를 0으로 초기화 : int a[5] = { 0 }; 으로 가능하다. 이 방법은 배열의 크기가 몇개이든 사용할 수 있다. 

 

배열의 크기 없이 초기값만 있는 경우 : 컴파일러가 자동으로 초기값들의 개수만큼 배열의 크기를 잡는다. 그러나 배열의 크기는 꼭 써주도록 하자. 

 

 

2) 초기화 예제

 

...

 

 

3) 배열의 사용

 

배열 요소의 개수 계산

 

 

배열의 복사

 

잘못된 방법 
int score1[SIZE];
int score2[SIZE];
score1 = score2;

// 배열의 이름(여기서는 score)에는 배열의 시작주소가 들어간다. 따라서 위 문장은 배열의 주소를 대입하고 있는 문장이 된다.

 

올바른 방법
int score1[SIZE];
int score2[SIZE];
int i;

for(i = 0; i < SIZE; i++)
     score1[i] = score2[i];

// 따라서 이처럼 배열의 원소를 하나씩 대입해야 배열을 올바르게 복사할 수 있다.

 

 

배열의 비교 : 배열 내용 전체를 다른 배열 내용 전체와 같은지 비교 -> 이 역시 원소를 하나씩 비교해야 한다.

 

 

 

 


int a[5]와 int b[5]를 비교할 때 if(a==b)를 사용하면 두 배열의 내용이 같은지 비교가 될까요?

배열의 이름은 배열이 저장된 메모리의 주소와 같습니다. 따라서 int a[5]와 int b[5]를 비교할 때 if(a==b)를 사용하면 배열의 내용을 비교하는 것이 아니라 각 배열이 저장된 메모리의 주소를 비교하는 것이 됩니다.


Quiz 01배열이 초기화에서 초기값의 개수가 배열의 크기보다 작은 경우에는 컴파일 오류가 발생한다.

  • 1 O
  • 2 X

정답 :2

해설 :앞에 있는 요소들만 초기화 되고, 나머지 배열 요소들은 모두 0으로 초기화 된다.

 

 

 

Quiz 02배열이 10개의 요소를 가진다면 첫 번째 요소의 배열 인덱스는 무엇인가?

  • 1 -1
  • 2 0
  • 3 1
  • 4 0 또는 1

정답 :2

해설 :배열의 인덱스는 0~(배열크기-1)의 정수를 사용한다.

 

 

 

Quiz 03다음 중 선언문으로 옳은 것은?

  • 1 int a[200] ;
  • 2 int a[] ;
  • 3 int a[2+1] ;
  • 4 int a[10.2] ;

정답 :1

해설 :배열크기를 생략하거나, 배열크기로 수식이나 실수를 사용할 수 없다.


학습정리

1. 배열의 개념

  • 배열(Array): 동일한 타입의 데이터가 여러 개 저장되는 저장 장소
  • 배열 요소(array element) 또는 배열 원소: 배열을 구성하는 각 항목
  • 인덱스(index), 첨자(subscript): 배열 요소의 번호

2. 배열과 반복문

  • 배열은 반복문을 사용하여 배열의 원소를 간편하게 처리할 수 있음

3. 배열의 초기화

  • 배열의 초기화는 원소들의 초기값을 콤마로 분리하고 중괄호를 사용
  • 초기값의 개수가 배열 크기보다 큰 경우에는 컴파일 오류가 발생
  • 초기값의 개수가 배열의 크기보다 작으면 앞에 있는 요소들만 초기화 되고 나머지 배열 요소들은 모두 0으로 초기화됨