📚1차원 배열Permalink

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

📄배열 선언Permalink

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

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

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

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



📄배열의 초기화Permalink

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

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};  // 에러
}




📚다차원 배열Permalink

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

📄2차원 배열Permalink

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차원 배열Permalink

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형 배열과 문자열Permalink

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);
}



📚함수와 배열Permalink

배열을 함수의 매개변수로 사용할 때 함수 호출 시 첨자를 빼고, 배열 이름만 명시하여 호출해야 한다. 매개변수가 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