Programming/C

C언어 - 1차원 배열

JunsuKim 2021. 9. 23.
728x90

배열이란?

단순하게 "둘 이상의 변수를 모아 놓은 것"이다.

배열은 다수의 데이터를 저장하고 처리하는 경우에 유용하게 사용할 수 있다.

배열은 1차원 배열뿐만 아니라 2차원, 3차원 등 다차원 배열이 있다. 우선 1차원 배열에 대해서 알아본 후,

나중에 다차원 배열에 대해 설명하겠다.

1차원 배열 선언

배열을 선언하는 데에는 3가지 요소가 필요하다.

  • int  //배열을 이루는 요소의 자료형
  • arr  //배열의 이름
  • [4]  //배열의 길이

즉, 위의 배열이 선언하는 바는 "int형 변수 4개로 이루어진 arr이라는 이름의 배열을 선언해라"이다.

 

다른 배열을 예시로 더 들어보겠다.

double arr[3];   // double형 변수 3개로 이루어진 배열 arr

char str[5];      // char형 변수 5개로 이루어진 배열 str

1차원 배열의 접근

배열을 선언하는 법을 알았으니, 접근하는 법에 대해 알아보겠다.

int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

배열을 대상으로 값을 지정할 때에는 위와 같이 원하는 자리에 값을 할당해주는 형태로 접근하면 된다.

여기서 중요한 것은 배열의 위치 정보를 명시하는 인덱스 값은 1이 아닌 0부터 시작한다는 것이다.

#include<stdio.h>

int main() {
    int arr[3];
    int sum = 0;
    
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    
    for(int i=0; i<3; i++) sum += arr[i];
    
    printf("%d", sum);
    return 0;
}

// 60

위에서 알 수 있듯이 배열의 모든 요소는 반복문을 이용해서 순차적으로 접근하는 것이 가능하다.

선언과 동시에 초기화하기

바로 위의 코드를 보면 배열을 선언한 후 위치에 따른 값들을  할당해 주었다. 이는 프로그램을 하는 입장으로써 상당히 귀찮을 수 있다. 이를 간편하게 하기 위해 선언과 동시에 초기화를 하는 방법을 알아보겠다.

int arr[5] = {1, 2, 3, 4, 5};
int arr1[] = {1, 2, 3, 4, 5, 6};
int arr2[5] = {1, 2};

첫 행의 arr배열을 보자. 중괄호 안에 초기화할 값들을 나열하면, 해당 값들이 순서대로 저장이 된다.

이를 초기화 리스트라고 한다.

두번째 행의 arr1배열에서는 배열의 길이가 따로 설정되어 있지 않다. 초기화 리스트가 선언돼 있으면 길이가 자동으로 초기화 리스트의 수만큼 채워지기 때문이다.

세번째 행의 arr2배열은 길이가 5이지만 초기화된 값들은 2개밖에 없다. 이러한 경우 나머지 값들은 0으로 초기화가 된다.

#include<stdio.h>

int main() {
    int arr1[5] = {1, 2, 3, 4, 5};
    int arr2[] = {1, 2, 3, 4, 5, 6};
    int arr3[5] = {1, 2};
    
    for(int i=0; i<5; i++) printf("%d ", arr1[i]);
    printf("\n");
    for(int i=0; i<6; i++) printf("%d ", arr2[i]);
    printf("\n");
    for(int i=0; i<5; i++) printf("%d ", arr3[i]);
    printf("\n");
    
    return 0;
}

/*
1 2 3 4 5
1 2 3 4 5 6
1 2 0 0 0
*/

배열을 이용한 문자열 변수의 표현

C언어에서는 큰 따음표(")를 이용하여 문자열을 표현한다.

char str[12] = "Hello World";

이를 보며 이상한 점이 있을 것이다. "Hello World"의 길이는 공백을 포함하여 11인데 왜 배열의 크기는 12인가?

이는 사진에서 보이듯 마지막에 "\(역슬래쉬) 0"이라는 특수문자가 자동으로 삽입되었기 때문이다.

이와 같이 문자열을 저장하는 목적으로 char형 배열을 선언할 경우 특수문자 "\0"의 공간까지 고려해서 크기를 결정해야 한다.

"\0"을 널(null) 문자라 하는데, 이는 문자열 배열의 끝을 알려주는 역할을 한다.

scanf 함수를 이용한 문자열의 입력

scanf 함수를 이용하여 문자열을 입력할 때는 서식문자 %s를 사용한다. 

#include<stdio.h>

int main() {
    char str[20];
    int indx = 0;
    
    scanf("%s", str);
    
    while(str[idx] != 0) {
        printf("%c", str[idx]);
        idx++;
    }
    
    return 0;
}

여기서 특이한 점을 발견할 수 있을 것이다. 바로 scanf 함수에서 문자열을 입력받을 때 &str이 아닌 그냥 str을 쓴 것이다. 포인터를 공부하다 보면 알게 될 것이지만 간단히 설명해보겠다.

&연산자는 피연산자의 주소값을 반환한다. 배열은 주소의 의미를 내포하고 있기 때문에 &연산자를 사용할 필요가 없는 것이다.

728x90

댓글