본문 바로가기

FALL in/G.MA' s C

[C프로그래밍] - 배열


배열(Array) 

배열은 같은 자료형(data type)을 가진 변수들의 나열이라고 생각하면된다. 배열은 나누어서 할당 될 수 없고 메모리에 연속적으로 저장된다. (메모리에 연속된 공간이 필요하다 )


인덱스(index) : 배열의 요소를 구별하기위해 사용하는 번호이다. C에서 인덱스는 항상 0부터 시작한다. 



1차원 배열 

1차원 배열의 선언 형식은 아래와 같다.


데이터타입 배열이름[배열요소(변수)개수];


예들들어, 정수변수가 10개 들어갈 수 있는 배열  arr라는 배열을 선언하려 하면 아래와 같이 선언하면 된다.

int arr[10];

int형 배열요소 10개로 구성된 배열 arr이라는 뜻이다.

배열요소는 arr[0]부터 arr[9]까지이고 메모리 할당크기는 int가 4byte이므로 4byte X 10 = 40byte가 된다.


- 1차원 배열의 초기화

1차원 배열의 초기화 방식은 아래와 같다.


데이터타입 배열이름[배열크기] = {초기값 리스트};


예를들어, int arr[3] = {1,2,3}; 와 같이 초기화하면,


위 그림과 같이 메모리에 저장된다.


int arr[] = {1,2,3}; 과 같이 초기화를 해줄수도 있는데

이렇게 배열크기를 정해주지않고 초기화를 하면 초기값개수에 따라 자동으로 배열크기가 정해진다. 즉 위 배열의 크기는 3이된다.


int arr[5] = {1,2,3};과 같이 초기화 하게 되면 나머지 arr[3],arr[4]에는 0이 들어가게된다.

배열선언시 배열크기만큼 전부 초기화 해주지 않을경우, 하나이상의 값만 초기화 하게되면 나머지는 자동으로 0으로 초기화된다.

즉, 아무리 큰배열이라도 하나만 초기화 하면 초기화 하지 않은 뒷부분은 모두 0으로 초기화된다는 말이다.

예를들어,  int arr[10000]모두 0으로 초기화 하고싶다면 int arr[10000] = {0};또는 int arr[10000] = {0,};으로 선언하면된다.


int arr[3] = {1,2,3,4,5}; 와 같이 초기화 하면 배열크기를 넘어선 4,5는 자동으로 없어지고 , 1,2,3만 초기화된다.



- 문자 배열 

문자 배열은 문자의 나열이다. char배열을 사용한다.

char arr_c[5] = "gma"; 와 같이 초기화 해줄 수있다. 아래 그림과 같이 저장된다.




문자열 끝에 \0은 문자열이 끝난다는것을 알려준다.

char arr_c[5] = {'g','m','a'}; 와 같이 문자배열을 초기화 해줄수도 있는데 이렇게 하면 문자열의 마지막을 알리는 \0이 문자열끝에 들어가지않는다. 




다차원 배열 

다차원 배열은 2차원 이상의 배열을 말한다.

배열 차수 만큼 [배열크기]를 추가 하면된다. 2차원배열 선언예) 데이터타입 배열이름[행의개수][열의개수]

 

2차원 배열 int arr[2][3]을 선언했을때 배열의 논리적 구조이다.

하지만 컴퓨터에는 위와 같이 저장되지는 않고 연속된 일차원 구조로 저장된다. 

그 순서는 위그림의 번호 순이다. c는 행우선 언어이므로 행우선적으로 순서가 매겨진다.



3차원 배열의 선언은

데이터타입 배열이름[면의개수][행의개수][열의개수] 방식으로 하면된다.


- 2차원 배열의 초기화

int arr[2][3] = {{1,2,3},{4,5,6}}; --> 이렇게 하는것을 권장

int arr[2][3] = {1,2,3,4,5,6}; -->읽기 힘듬

int arr[][3] = {{1,2,3},{4,5,6}};

과 같이 해줄수 있다. 


- 문자 다차원 배열

char c[3][20] = {"Hong Gil Dong","Computer Department","Seoul Korea"} ; 와 같이 문자 2차원배열을 초기화 해줄수있다.


논리적 구조는 위와 같다.