1. 배열의 정의
동일한 자료형을 갖는 자료들의 리스트이며, 배열의 각 요소는 하나의 변수로 취급합니다.
그리고 배열은 배열명과 첨자로 구분합니다.
2. 배열의 선언 형태
배열의 차원은 첨자의 개수로 표현할 수 있습니다. 첨자란 []를 의미하며 예컨대 A[]는 1차원 배열이라고 할 수 있습니다.
따라서 2차원 배열은 A[][]이 됩니다.
배열의 각 요소는 배열명과 첨자로 구분되며 첨자는 0부터 시작합니다.
이때 배열의 각 요소는 배열명과 첨자로 구분하는데 배열을 선언하기 위해서는 자료형을 선언해줘야 하며, 기억클래스를 갖습니다.
배열을 선언하는 방식은 아래형태로 선언합니다.
자료형 배열명[개수] //1차원 배열
자료형 배열명[행의수][열의수] //2차원 배열
자료형 배열명[면의수][행의수][열의수] //3차원 배열
예컨대 int a[10]이면 1차원 배열이고 배열명은 a이며 배열의 크기는 10개이며, 배열값은 int형이라는 의미입니다.
그리고 int b[3][4]이면 2차원 배열이고 배열명은 b이고 3행 4열로 된 12개의 요소를 가진 정수형 배열이라는 의미입니다.
또한 int c[2][3][4] 이면 3차원 배열이고 배열명은 c이며 2면 3행 4열로 이루어진 24개의 요소를 가진 정수형 배열이라는 의미입니다.
C에서는 char형 배열도 가능합니다.
사용하는 형식은 아래와 같습니다.
char 배열명[문자열길이]
예컨대 char str[12]는 배열명이 str이며 12 문자 길이를 가진 char형 배열입니다.
3. 배열 초기화
1) 배열 선언 후 초기값 할당
int array[4]; // 반드시 배열의 크기를 지정해야 함
array[0] = 10;
array[1] = 20;
array[2] = 30;
array[3] = 40;
2) 배열 선언과 동시에 초기값 할당
int array[4] = {10,20,30,40};
int array2[] = {10,20,30,40}; //배열의 크기 생략 가능
int array3[4] = {10,20,30, }; // array3[3] = 0으로 초기화 됨
//int array4[4] = {10, ,30,40}; // 에러 발생
//int array5[4] = {10,20,30,40,50}; // 에러 발생
3) 외부로부터 자료를 입력받아 초기화
int x[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &x[i]); //배열의 크기가 10이므로 10번의 입력을 받음
}
4) 2차원 배열의 초기화
int array1[3][3] = {1,2,3,4,5,6,7,8,9};
int array2[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int array3[3][3] = {{1,2,3},
{4,5,6},
{7,8,9}};
5) 3차원 배열의 초기화
int c[2][3][4] = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}},
{{13,14,15,16},{17,18,19,20},{21,22,23,24}}};
6) char형 배열의 초기화
char name[] = "kim zero week"; //문자열 단위로 초기화
char address[] = {'s','e','o','u','l','\0'}; // 문자 단위로 초기화 -> 반드시 \0 문자를 삽입해야 함
4. 기억공간 표현
1) 1차원 배열의 기억공간 표현
2) 2차원 배열의 기억공간 표현
3) 3차원 배열의 기억공간 표현
4) char형 배열의 기억공간 표현
5. 사용예시
1차원 배열의 사용예시1)
#include <stdio.h>
void main() {
int array1[4] = {1, 2, 3, 4};
int array2[] = {1,2,3,4};
int array3[4] = {10,20};
int array4[4] = {0};
for(int i=0;i<4;i++) {
printf("%d ", array1[i]); //출력: 1 2 3 4
};
printf("\n");
for(int i=0;i<4;i++){
printf("%d ", array2[i]); //출력: 1 2 3 4
}
printf("\n");
for(int i=0;i<4;i++){
printf("%d ", array3[i]); //출력: 10 20 0 0
}
printf("\n");
for(int i=0;i<4;i++){
printf("%d ", array4[i]); //출력: 0 0 0 0
}
printf("\n");
}
1차원 배열의 사용예시2)
#include <stdio.h>
void main() {
static int x[] = {1,2,3,4};
static int y[] = {10,20,30,40};
int i,z[4];
for(i=0;i<4;i++)
z[i] = x[i]+y[3-i];
printf("반대 위치의 배열 요소의 합\n");
for(int i=0;i<4;i++)
printf("%d+%d = %d\n",x[i],y[3-i],z[i]);
//출력: 1+40 = 41
// 2+30 = 32
// 3+20 = 23
// 4+10 = 14
}
2차원 배열의 사용예시1)
#include <stdio.h>
void main() {
static int score[4][3] = {{90,90,90},
{80,80,80},
{70,70,70},
{60,60,60}};
int sum,i,j;
printf("번호\t국어\t수학\t영어\t합계\n");
for(int i=0;i<4;i++){
sum = 0;
printf("%3d",i+1);
for(int j=0;j<3;j++){
printf("\t%3d",score[i][j]);
sum += score[i][j];
}
printf("\t%3d\n",sum);
}
//출력: 번호 국어 수학 영어 합계
// 1 90 90 90 270
// 2 80 80 80 240
// 3 70 70 70 210
// 4 60 60 60 180
}
char형 배열의 사용예시)
#include <stdio.h>
void main() {
char name[] = "kim zero week"; //문자열 단위로 초기화
char address1[6] = {'s', 'e', 'o', 'u', 'l', '\0'};
char address2[6] = {'s', 'e', 'o', 'u', 'l'}; //\0이 없으면 마지막에 쓰레기값이 붙을 수도 있
printf("\n name : %s", name); //출력: name : kim zero week
printf("\n address1 : %s", address1); //출력: address1 : seoul
printf("\n address2 : %s", address2); //출력: address2 : seoul
}
char형 배열의 사용예시2)
#include <stdio.h>
void main() {
char string[50];
int i =0;
printf("문자열을 입력하세요:");
scanf("%s",string);
printf("입력받은 문자열: %s\n",string);
printf("문자단위 출력:");
while(string[i] != '\0'){ //scanf 함수 호출을 통해 입력받은 문자열의 끝에도 \0문자가 자동으로 삽입됨
printf("%c",string[i]);
i++;
}
}
6. 배열을 함수의 매개변수로 사용했을 때
함수를 호출할 때 배열을 함수의 매개변수로 사용한다면 배열명만 명시하여 호출합니다.
예컨대 아래처럼 사용가능합니다.
int score[2][2] = {{1,2},{3,4}}일 때 score_sum()함수에서 매개변수로 사용한다면
score_sum(score);
이때 함수의 헤더에는 1차원 배열의 경우 크기 생략 가능하며, 다차원 배열의 경우 가장 높은 차원의 크기를 생략 가능합니다.
2차원 배열이 함수의 매개변수로 사용된 예시)
#include <stdio.h>
void score_sum(int gr[][5],int,int); //가장 높은 차원의크기를 생략
void main() {
int score[2][5] = {{10,20,30,40,50},{60,70,80,90,100}};
score_sum(score, 2, 5);
}
void score_sum(int gr[][5],int row, int col){ //가장 높은 차원의크기를 생략
int sum[2] = {0};
int i,j;
for(i=0;i<row;i++){
for(j=0;j<col;j++)
sum[i] += gr[i][j];
printf("sum[%d] = %d\n",i,sum[i]);
//출력: sum[0] = 150
// sum[1] = 450
}
}
}
}
'C Programming > C' 카테고리의 다른 글
[C] 구조체 (0) | 2024.05.31 |
---|---|
[C] 포인터 (0) | 2024.05.17 |
[C] 기억 클래스 (1) | 2024.04.26 |
[C] 함수 (0) | 2024.04.26 |
[C] goto문 (0) | 2024.04.26 |