[C]배열
📚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]);
}
}
Leave a comment