728x90
728x90

배열(Array)

 

배열(Array)

  • 많은 양의 데이터를 한꺼번에 일괄적으로 처리하고자 할 때, 유용하게 사용될 수 있는 변수들의 모임
  • 배열 선언 방법
int a[10];    // 자료형 배열_이름[배열_길이]

 

  • 배열의 각각의 요소 a[0], a[1], a[2], …, a[9] 요소(Element)라고 한다.
  • 배열 각각의 값은 대괄호([]) 안의 숫자로 나타내는데, 이를 배열의 인덱스(Index) 또는 첨자라고 한다.

 

배열의 선언 방법

방법  

int a[5] = { 1, 2, 3, 4, 5 };
  • 배열의 길이요소를 선언과 동시에 초기화 해주는 방법이다.

 

방법 ②

int b[] = { 1, 2, 3, 4, 5 };
  • 배열의 길이는 초기화하지 않고, 배열의 요소를 선언과 동시에 초기화 해주는 방법이다.
  • 프로그램은 초기화 데이터가 5개이므로 자동으로 배열 b의 길이를 5로 할당하고, 배열의 요소에 값을 초기화한다.
  • 이 방법은 배열을 처음에 선언할 때만 가능하다는 점에 유의한다.
1 2 3 4 5

 

방법 ③

int c[5];
  • 배열의 길이는 초기화하고, 요소를 초기화하지 않는 방법이다.
  • 배열을 선언하게 되면 프로그램은 정수형 데이터를 저장하기 위한 연속된 메모리의 공간을 찾아서 메모리 할당이 발생하게 된다.
    • 이 때, 할당된 메모리 공간은 초기화되지 않기 때문에 쓰레기 값(Garbage Value)으로 채워진다.
? ? ? ? ?

 

방법 ④

int d[5] = { 0 };
  • 배열의 길이 요소를 선언과 동시에 초기화 하지만, 1개요소만 선언하는 방법이다.
  • 이 때, 모든 배열의 요소 d[0], d[1], d[2], d[3], d[4] 0으로 초기화 된다.
0 0 0 0 0

 

방법 ⑤

int e[5] = { 1, 2 };
  • 배열의 길이 요소를 선언과 동시에 초기화 하지만, 2 이상, 배열의 길이 미만의 요소만 선언하는 방법이다.
  • e[0]의 요소는 1로, e[1]의 요소는 2로 초기화 된다.
  • 배열의 길이보다 초기화 데이터의 개수가 적을 때는 처음 초기화 값을 제외한 나머지 배열 요소들의 값은 모두 0으로 초기화 된다.
1 2 0 0 0

 

  • 만약 할당된 배열의 길이보다 초기화하고자 하는 데이터가 많다면, 컴파일러는 "error: too many initializers' 라는 오류 메시지를 출력한다.

 

사용 시 주의할 점

  • 배열에 데이터를 입력할 때, 서식 문자 뒤에 한 칸의 공백을 줄 경우, 마지막 데이터를 입력받고 나서 CPU는 뭔가 입력받을 데이터가 더 있다고 생각하기 때문에 다음 과정을 진행하지 않고 계속 입력 대기 상태에 놓이게 된다.
    • scanf() 문의 서식 문자에서 "%d""%lf"화이트 스페이스(공백(Space), 탭(Tab), 엔터(Enter))는 입력 받지 않고 건너뛰는 속성을 갖고 있다. ("%c" 는 해당되지 않는다.)
    • "%d" 와 같이 공백이 없거나, "% d" 와 같이 앞에 공백이 들어가는 것은 괜찮다.
  • 따라서 데이터를 입력 받을 때, scanf() 문의 서식 문자 다음에 공백이 들어가지 않도록 주의해야 한다.

 

#include <stdio.h>

int main() {
    int ary[5];
    
    scanf("%d %d %d %d %d ", &ary[0], &ary[1], &ary[2], &ary[3], &ary[4]);    // 맽 끝에 공백을 줄 경우
    
    for (int i = 0; i < 5; i++) {
        printf("%d ", ary[i]);
    }

    return 0;
}
1 2 3 4 5
_ (입력 대기)

 

728x90
728x90

'Programming > C' 카테고리의 다른 글

[C] 일차원 배열의 시프트(Shift)  (0) 2022.09.29
[C] 포인터(Pointer) 연산 정리  (0) 2022.06.24