본문 바로가기

카테고리 없음

배열과 배열초기화 하는법

안녕하세요 오늘은 배열에과 배열 초기화에 대하여 알아보겠습니다.

 

배열이란?

연속적인 항목들이 동일한 크기의 순서를 갖고 나열되어 있는 데이터의 집합

입니다.

 

배열을 구성하는 각각의 값을 배열 원소(element) ,

배열에서의 위치를 가리키는 숫자를 첨자(subscript) 또는 인덱스(index) 라고 합니다.

 

 

일차원 배열은 배열명 다음에 구두점 대괄호 [] 를 사용하며 대괄호 안에 배열의 크기를 나타내는 수를 하나 씁니다.

배열명을 만드는 규칙은 변수명을 만드는 규칙과 동일합니다.

 

예를 하나 들어보겠습니다.

 

int example[3];

 

먼저, 저는 example이라는 배열명을 만들었습니다.  대괄호 안에는 3을 넣었지요.

배열 선언문에서 사용하는 첨자는 양의 정수이며, 배열의 크기를 나타냅니다.

그러므로 example배열은 정수형 자료 3개를 저장할 수 있게 된것입니다.

이때 3개의 공간을 배열의 원소(element)라고 합니다.

 

비쥬얼 스튜디오에서 한 번 실행해 보겠습니다.

 

위에 example 배열명을 줄여서 ex로 만들었습니다. 

 

무언가 하나 신기한 점이 있지 않나요?

배열 원소의 첨자 순서가 바로 0부터 시작한다는 점입니다.

 

만약 여기에 ex[3]을 집어넣으면 어떻게 될까요?  

 

 

ex[3]을 넣었더니 디버그는 돌아가지만, 에러가 뜨는 점을 확인 하실 수 있습니다.

 

이처럼  배열 선언시, 배열 원소의 첨자는 0부터 시작한다는 점을 꼭 기억하셨으면 좋겠습니다 (중요!)

 

 

 

이번에는 일차원 배열 초기화에 방법에 대해서 알아보겠습니다.

 

1. 일차원 배열 초기화 방법으로는 먼저 

 

int example[4]={10,20,30,40); 

 

위와 같이 변수 초기화와는 달리 원소가 많으므로 중괄호로 묶어줍니다.

 

이때, 아까 위에 말씀드린것처럼, example[0]부터 10,20,30,40이 들어간다는점 꼭 기억해주세요! 

 

example[0] = 10;

example[1] = 20;

example [2] = 30;

example [3] = 40;

 

을 간단하게 초기화 한 것이라고 보시면 됩니다.

*절대로 example[4]라고 1부터 4까지를 생각하시면 안됩니다.

 

2.  문자형 배열을 초기화 하는 방법입니다.

 

char name[ ] = {'e', 'x', 'a', 'm', 'p', 'l', 'e', '\0'};

 

example은 마지막 원소 NULL문자 까지 합쳐서 총 8글자 입니다.

문자형 배열을 선언과 함께 초기화를 하는 경우 원소의 개수 8은 생략이 가능합니다.

 

char name[ 8 ] = {'e', 'x', 'a', 'm', 'p', 'l', 'e', '\0'}; 

//위처럼 8을 생략 가능하다는 의미입니다.

 

대신 문자 배열의 마지막 원소는 반드시 널(NULL)문자인 '\0'을 넣어주셔야 합니다.

왜냐하면 문자형 배열은 문자열과 관련이 있는데, C언어에서 문자열은 항상 널 문자로 끝나기 때문입니다.

 

NULL문자 제외

 

NULL문자 사용

NULL문자를 제외하고 원소의 개수를 사용한 소스는 디버그 오류가 난다는 점을 알 수 있었습니다.

(원소의 개수는 생략이 가능합니다. )

 

3. 문자 배열은 문자열 형태로도 초기화할 수 있습니다.

 

char name[ ]="example";

 

이런식으로 말이죠, 여기서는 위와 다르게 \0을 사용하지 않았으나, 널 문자가 자동을 마지막 원소에 할당되는 것을 기억해주세요. 고로, 이 문자열 형태도 원소의 개수는 8개 입니다.

 

참고로 빈 칸인 경우도 하나의 원소 개수입니다.

 

char name[ ] = 'e', 'x', ' ', 'a', 'm', 'p', ' ', 'l', 'e','\0';

 

위처럼 ex amp le를 쓰고 싶은 경우 빈칸이 두 개이므로, 원소의 개수는 10입니다.

 

 

4. 배열 원소가 초기화 데이터 수보다 많으면, 나머지 원소들은 모두 0으로 초기화 됩니다.

 

int example [50] = {10,20,30};

//10,20,30,0,0,0,0,0 ...

 

위와 같이 50개의 원소를 갖는 배열을 3개만 초기화 한 경우 나머지 47개는 모두 0으로 자동 초기화 됩니다.

 

만약 원소의 수가 초기화한 데이터의 수보다 적으면 에러가 발생합니다.

 

int example[2] = {10,20,30};

//에러 발생

 

배열를 선언과 동시에 초기화 하거나, 선언먼저 하고 대입한 경우 모두  각 원소에 같은 값이 할당됩니다.

 

int example[3] = {10,20,30}; //배열 선언과 초기화

 

int example[3];

example[0] = 10;

example[1] = 20;

example[2] = 30;

//배열 선언 후, 대입

 

마지막으로 하나의 소스코드를 보겠습니다.

 

 

 

 

ex1은 배열을 선언과 동시에 초기화 한 방법이고, ex2는 선언을 먼저하고 대입을 한 경우입니다.

 

각각의 주소를  실행 했더니  아래와 같은 실행 결과가 나왔습니다.

 

위의 소스에서 주소를 실행하는 코드는 %p입니다.

 

몇 가지 눈에 띄는 점이 있지 않나요?! 

 

첫 번 째로는 위에서 배운 것 같이 ex1에서  배열 원소가 초기화 데이터 수보다 많으면, 나머지 원소들은 모두 0으로 초기화 되었다는 점을 알 수 있습니다.

 

두 번째로는, ex1[0] = 10의 주소와 ex1의 주소가 같고

ex2[0] = 10의 주소와 ex2의 주소가 같다는 점을 알 수 있습니다.  

 

일차원 배열의 이름은 그 배열의 시작주소라는 것을 꼭 ! 기억해주세요. 

 

 

 

C++프로그래밍(21-2학기)한성현교수 강의 내용 변형 및 요약