본문 바로가기
IT/C

c언어 배열

by -_-* 2021. 1. 13.
반응형

지난 포스트에서 우리는 C언어 프로그램의 흐름을 제어할 수 있는 조건문, 반복문, 그리고 분기문을 살펴보았습니다. 

오늘은 C언어 배열을 살펴보도록 하겠습니다. 

 

 

 

 

 

배열이란, 메모리 공간에 같은 데이터타입의 데이터를 연속적으로 할당하고 이를 묶어서 하나의 같은 이름으로 관리, 사용하는 방법을 말합니다.  

 

1차원 배열

자료형 배열이름 [배열의크기]; //배열의 선언
자료형 배열이름 [배열의크기] = {초기값1, 초기값2, ..., 초기값N}; //배열의 선언 및 할당

 

배열은 같은 자료형의 데이터를 연속적으로 할당하고 이를 하나의 이름으로 사용한다고 했습니다. 

따라서 배열을 사용할 때에는 변수와 같이 자료형과 이름을 주어 공간을 할당받습니다. 변수와 차이점은 여러개의 공간이 필요함으로 그 크기를 알려줘야합니다. 

배열을 선언하는 방법은 첫번째로 자료형을 명시하고 배열이름을 여러분들이 식별자규칙을 지켜 부여합니다. 그리고 배열의 크기는 자연수의 값을 주면 배열을 선언할 수 있습니다. 그리고 두번째 방법으로는 선언과 동시에 값을 할당할 수 있습니다. 배열의 위치를 나타내는 index는 C언어의 경우 0부터 시작합니다. 

 

 

1차원 배열 예제

 

다음은 c언어의 1차원 배열 예제 코드입니다. 

 

#include <stdio.h>
int main(void) {
int numbers[5], index; // 1차원 배열선언, 인덱스 변수 선언

    printf("배열의값\n"); 
    for(index=0; index <5; index++)
    {
        numbers[index] = index+1; // 배열 값 할당
        printf("%d번째 배열의 값: %d \n", index+1, numbers[index]); //배열 값 출력
    }
    
    printf("배열크기\n"); 

    for(index=0; index <5; index++)
    {
        printf("%d번째 배열의 크기: %d \n", index+1, sizeof(numbers[index])); // 배열 각 항목의 메모리 상의 크기
    }
    
    printf("배열의 전체크기: %d \n", sizeof(numbers));  // 배열 전체의 메모리 상의 크기
return 0;
}

 

정수형의 데이터를 저장하는 배열을 numbers라는 이름으로 선언하였습니다. 배열의 크기는 5입니다. 

그리고 배열의 index를 관리하기 위한 index 변수를 정수형으로 선언했습니다. 

 

c언어 배열의 index는 0부터 할당받음으로 index 변수의 초기값을 0부터 4까지 다섯번 반복하며 각 배열에 값을 할당하고 그 값을 출력해보았습니다. 

 

또한 위의 예제코드에서 sizeof() 연산자를 이용하여 그 크기들을 각각 확인할 수 있었습니다. 

C언어의 경우 index가 0부터 시작하므로 실제로 배열의 공간들은 numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]라는 이름으로 각각 4byte씩 할당받습니다.  따라서 배열 numbers는 4byte의 5개의 연속적인 공간을 할당받아 전체크기는 20byte입니다. 

 

다음은 위의 예제코드의 실행결과입니다. 

 

 

 

2차원 배열

다차원 배열이란, 배열의 요소 자체가 또다른 배열이 되는 경우를 말합니다. 
그 중 2차원배열은 주로 행렬을 표현할 때 널리 사용되는 방법인데요. 행과 열의 크기를 표현할 수 있습니다.

하지만 실제로 메모리상에서는 일렬의 형태로 할당이 됩니다. 

 

자료형 배열이름[배열의크기1][배열의크기2];
자료형 배열이름[배열의크기1][배열의크기2] = {{초기값1, 초기값2, ... , 초기값N},..., {초기값1, 초기값2, ... , 초기값N};

 

 

 

2차원 배열 예제

다음은 C언어 2차원 배열의 예제 코드입니다. 

 

#include <stdio.h>
int main(void) {
int array[2][3]; // 2차원 배열선언
int i, j;

    for(i=0; i<2 ; i++)
    {
        for (j=0 ; j<3 ; j++)
        {
          array[i][j] = (i+1)*(j+1); // 배열값 할당
          printf("array[%d][%d] : %d \n", i , j, array[i][j]); // 배열값 출력
        }
     }

     printf("배열의 전체크기 : %d \n" , sizeof(array)); // 배열의 한 행에 대한 메모리상의 크기
     printf("배열의 행의크기 : %d \n" , sizeof(array[0]));  // 배열의 전체에 대한 메모리상의 크기
     
     return 0;
}

 

정수형의 자료형 타입을 할당할 배열의 이름을 array라고 부여했습니다. 

배열의 크기는 행의 크기를 2, 열의 크기를 3으로 선언하여 정수형 데이터를 6개 할당할 수 있는 배열이 생성됩니다. 

 

이차원배열의 값을 할당하고, 그 값을 출력하기 위해 중첩 반복문을 사용하고 있습니다. 

인덱스 i로 반복을 제어하는 외부 for문의 경우 배열의 행을 관리하고, 인덱스 j로 반복을 제어하는 내부 for문의 경우 배열의 열에 해당되는 부분을 관리합니다. 

 

이차원 배열의 전체크기는 자료형이 정수타입으로 하나의 요소가 4byte인데, 행이 2개고 열이 3개이므로 6개의 메모리 공간이 생깁니다. 따라서 배열의 전체 크기는 24byte입니다. 

마찬가지로 하나의 행은 3개의 열을 가지므로 정수형 타입이 4byte이기 때문에 하나의 행은 12byte의 메모리 공간을 할당하게 됩니다. 

 

 

 

오늘은 C언어의 배열을 선언하고 값을 할당하는 방법을 살펴보았습니다. 다음 포스트에서는 사용자 정의 자료형으로 불리는 구조체에 대해서 살펴보도록 하겠습니다. 감사합니다. 

반응형

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

C언어 공용체, 열거형 , 형정의  (0) 2021.01.16
C언어 구조체  (0) 2021.01.14
C언어 분기문 break /continue /goto / return  (0) 2021.01.12
C언어 반복문  (0) 2021.01.11
C언어 조건문  (0) 2021.01.10

댓글