[자료구조] C프로그래밍 기법(2) - 배열

2021. 4. 23. 23:15
728x90

 

1. 1차원 배열

배열(array)

: 같은 자료형의 데이터를 메모리 상에 연속적으로 저장하는 메모리 형

0(4byte) 1(4byte) 2(4byte)
     

배열의 선언

int key[3];
자료형 변수이름 왼쪽괄호 원소의 개수 오른쪽괄호
int  key [ 3 ]

 

- 변수 초기화의 필요성

key[0]
(4byte)
key[1]
(4byte)
key[2]
(4byte)
? ? ?

변수를 초기화 하지않으면 쓰레기 값이 저장되어 

이를 인지하지 못하고 연산할 경우 심각한 문제가 발생할 수 있다.

 

 

2. 배열의 초기화와 값 설정

배열의 초기화 방법2) 값 설정
방법 (1-1) 선언 시 초기화 int key[3] = {3,5,7}; int key[3] = {0,};
// 선언하면서 0으로 초기화

key[0] = 3;
key[1] = 5;
key[2] = 7;
방법 (1-2) 선언 시 초기화 int key[] = {3,5,7}

 

문자열

0 (1byte) 1 (1byte) 2 (1byte) 3 (1byte) 4 (1byte) 5 (1byte)
v a l u e \0

문자열의 경우 마지막 문자 뒤에 \0을 넣어 문장의 끝을 알려야한다. 

배열의 초기화 방법2) 값 설정
방법 (1-1) 선언 시 초기화 char str[6] = "value"; char str[6] = {0,}; // 선언하면서 0으로 초기화
str[0] = 'v';
str[1] = 'a';
str[2] = 'l';
str[3] = 'u';
str[4] = 'e';
방법 (1-2) 선언 시 초기화 char str[] = "value";
또는
char str[] = {'v','a','l','u','e'};

방법 2에서 0으로 초기화를 안해줬다면

str[5]="\0"; 을 추가해주어야 함.

 

아래 명령어를 이용하여 변수를 선언해주는 방법도 있다.

strcpy(string_key,"value");

 

배운 내용 테스트하기 - C

#include <stdio.h>
#include <string.h>

void main(int arc, char **argv){
	int i = 0, size = 0;
    int key1[3] = {3,5,7};
    int key3[3] = {0,};
    char string1[] ="value";
    char string2[100] = {0,};
    
    key2[0] = 3;
    key2[1] = 5;
    key2[2] = 7;
    
    size = sizeof(key1) / sizeof(int);
    printf("key1의 원소의 개수 : %d\n", size);
    for(i = 0; i<size ; i++){
    	printf("%d-> %d\n",i,key1[i]);
    }
    
    size = sizeof(key2)/sizeof(int);
    printf("key2의 원소의 개수 : %d\n", size);
    for(i = 0; i<size ; i++){
    	printf("%d-> %d\n",i,key2[i]);
    }
    
    size = sizeof(string1)/sizeof(char);
    printf("string1의 원소의 개수 : %d\n", size);
  	printf(string1 : %s\n",i,string1);
    
    printf(string2,"strcpy로 복사하기");
    size = sizeof(string2)/sizeof(char);
    printf("string2의 원소의 개수 : %d\n", size);
  	printf(string2 : %s\n",i,string2);
 }

 

3. 다차원 배열

다차원배열(Multi-Dimensional Array)

: 배열의 원소가 배열 자료형인 배열

 

[ 2차원 배열 ]

- 2차원 배열의 각 원소는 1차원 배열임. 

행/열 0열 1열 2열
0행 3 5 7
1행 4 6 8

위는 2개의 행과 3개의 열로 구성되어 있는 2차원 배열이다.

 

배열의 초기화 방법을 알아보자

방법1) 배열의 초기화 방법2) 값 설정
int values[2][3] = {{3,5,7},{4,6,8}};

또는

int values[2][3] = {3,5,7},{4,6,8};
int values[2][3] = {0,};
values[0][0] = 3;
values[0][1] = 5;
values[0][2] = 7;
values[1][0] = 4;
values[1][1] = 6;
values[1][2] = 8;

다차원 배열도 일차원 배열과 크게 다르지는 않다.

 

0(4byte) 1(4byte) 2(4byte) 3(4byte) 4(4byte) 5(4byte)
3 5 7 4 6 8

[ 3차원 배열 ]

 

int values[2][3][4]

 -> 3행 4열짜리 2차원 배열 2개로 이루어진 3차원 배열

행/ 열 0열 1열 2열 3열
0 0행 1 2 3 4
1행 5 6 7 8
2행 9 10 11 12
1 0행 13 14 15 16
1행 17 18 19 20
2행 21 22 23 24

배열 생성 방법, 초기화

//방법1 - 0으로 초기화
int multi_values[2][3][4] = {0,};
multi_values[0][0][0] = 1;
multi_values[0][0][1] = 2;
multi_values[0][0][2] = 3;
multi_values[0][0][3] = 4;
...
multi_values[1][2][0] = 21;
multi_values[1][2][1] = 22;
multi_values[1][2][2] = 23;
multi_values[1][2][3] = 24;


//방법2
int multi_values[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};

//방법3
int multi_values[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}
                              }};

 

반응형

BELATED ARTICLES

more