📚1차원 배열

배열이란 같은 자료형의 값이 순서대로 하나의 배열의 이름에 모여있는 것을 말한다. 각각의 자료는 원소라고 하고 이들은 배열명과 첨자로 구분된다. 첨자의 표현은 대괄호[]로 나타낸다.

📄배열 선언

1차원 배열은 배열의 첨자가 하나만 있는 것을 말한다. 첨자 안의 수는 배열의 크기를 나타내는데 이는 배열 전체의 구성 요소의 개수를 의미한다. 배열은 배열의 이름과 첨자로 구분되고 첨자는 0부터 시작된다. 배열의 각 요소는 일반 변수와 같이 취급되며 자료형과 함께 기억 클래스도 갖게 된다.

배열 선언은 배열의 각 요소를 위한 기억공간이 연속해서 할당되는 것을 의미한다. int array[5]라는 배열 선언은 int형 변수 5개가 모여 구성되는 array라는 이름의 기억공간 확보를 의미한다.

1
2
3
4
5
6
#include <stdio.h>

void main()
{
  int array[5];
}



📄배열의 초기화

배열도 변수와 마찬가지로 선언했으면 기억공간을 초기화해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

void main()
{
  
  int array[5];                       // 배열 먼저 선언 후 초기값 할당

  array[0] = 1;
  array[1] = 2;
  array[2] = 3;
  array[3] = 4;
  array[4] = 5;


  
  int array2[5] = {1, 2, 3, 4, 5};    // 배열 선언과 동시에 초기화
  int array2[] = {1, 2, 3, 4, 5};     // 배열 크기 생략 가능
  int array2[5] = {1, 2, 3, 4, };     // 배열 크기 보다 적은 개수 초기화
  int array2[5] = {0};                // 모든 원소 0으로 초기화
  int array2[5] = {1, 2, 3, 4, 5, 6}; // 에러
  int array2[5] = {1, 2, , 4, 5, 6};  // 에러
}




📚다차원 배열

2차원 이상의 배열을 다차원 배열이라고 한다. 일반적으로 2차원 배열과 3차원 배열이 사용된다. 2차원 배열은 선언문에 2 개의 첨자를 가진다.

📄2차원 배열

1
2
3
4
5
6
7
8
9
10
11
자료형 배열이름[행의 ][열의 ];

// 2차원 배열 선언
int array[3][3];

// 2차원 배열 초기화
int array[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int array[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int array[3][3] = { {1, 2, 3}, 
                    {4, 5, 6}, 
                    {7, 8, 9} };

2차원 배열이 선언되면 실제 기억 공간에는 1차원으로 자료가 순서대로 저장된다. 2차원 배열에서 행만 표시하고 열을 생략하면 해당 행이 배열이 시작되는 주소를 가리킨다.


2차원 배열 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

void main()
{
    static int score[3][2] = { {100, 95},
                                {90, 85},
                                {70, 85} };

    int sum;

    printf("번호\t국어\t수학\t합계 \n");

    for (int i = 0; i < 3; ++i)
    {
        sum = 0;
        printf("%3d", i + 1);

        for (int j = 0; j < 2; ++j)
        {
            printf("\t%3d", score[i][j]);
            sum += score[i][j];
        }

        printf("\t%3d \n", sum);
    }
}


📄3차원 배열

1
2
3
4
5
6
7
8
자료형 배열이름[행의 ][열의 ];

// 3차원 배열 선언
int array[2][2][2];

// 3차원 배열 초기화
int array[2][2][2] = {1, 2, 3, 4, 5, 6, 7, 8};
int array[2][2][2] = { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } };


3차원 배열 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#pragma warning(disable:4996)

void main()
{
    static int score[2][2][2];              // 2개 반의 학생 2명 2과목 성적

    int sum[2] = { 0 };                     // 국어, 수학 합계

    for (int a = 0; a < 2; ++a)
    {
        for (int b = 0; b < 2; ++b)
        {
            printf("%d반 %d번 학생의 국어 점수, 수학 점수: ", a + 1, b + 1);
            scanf("%d %d", &score[a][b][0], &score[a][b][1]);
        }

        printf("\n");
    }

    for (int c = 0; c < 2; ++c)
    {
        for (int d = 0; d < 2; ++d)
        {
            for (int e = 0; e < 2; ++e)
            {
                sum[e] += score[c][d][e];
            }
        }
    }

    printf("전체반 4명의 국어 총점: %d, 평균: %d \n", sum[0], sum[0] / 4);
    printf("전체반 4명의 수학 총점: %d, 평균: %d \n", sum[0], sum[0] / 4);
}



📚char형 배열과 문자열

C 언어는 문자열에 대한 자료형이 없다. 문자열을 처리하기 위해 char형 배열을 사용하거나 포인터를 사용해야 한다. 문자열은 “ “로 묶인 문자 나열을 말하고 특수한 배열로 취급한다. C 언어는 문자열의 마지막 부분에 null 문자(‘\0’)를 자동으로 삽입한다.

1
2
3
4
5
6
char 배열이름[문자열 길이 + 1];
char str[11];

// char형 배열 선언 및 초기화
char str[ ] = "Hello World!";
char str[ ] = { 'H', 'E', 'L', 'L', 'O', '\0'};


문자열 저장 배열 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#pragma warning(disable:4996)

void main()
{
    char strIn[25], strOut[25];     // 문자열 저장 배열 선언
    int i = 0;

    printf("문자열 입력: ");
    scanf("%s", strIn);

    do
    {
        strOut[i] = '*';
        ++i;
    } while (strIn[i] != '\0');

    strOut[i] = '\0';

    printf("입력 문자열 배열 strIn = %s \n", strIn);
    printf("출력 문자열 배열 strOut = %s \n", strOut);
}



📚함수와 배열

배열을 함수의 매개변수로 사용할 때 함수 호출 시 첨자를 빼고, 배열 이름만 명시하여 호출해야 한다. 매개변수가 1차원 배열이라면 배열의 크기는 명시하지 않아도 되고, 다차원 배열의 경우 가장 높은 차원의 크기를 생략할 수 있다. 만약 배열의 크기를 명시할 경우 매개변수로 넘겨주는 배열의 크기가 항상 명시한 값으로 제한된다.

배열이 매개변수로 전달될 때 배열 값이 복사되어 전달되는 것이 아니라 배열의 위치만 전달된다. 쉽게 말해, 참조에 의한 전달 방법을 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

void GetSum(int score[][3], int, int);

void main()
{
    int score[2][3] = { {30, 50, 20},
                        {10, 40, 30} };

    GetSum(score, 2, 3);
}

void GetSum(int score[][3], int row, int col)
{
    int sum[2] = { 0 };
    
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
        {
            sum[i] += score[i][j];
        }

        printf("sum[%d] = %d \n", i, sum[i]);
    }
}



Tags: ,

Categories:

Updated:

Leave a comment