안녕하세요 오늘은 배열에과 배열 초기화에 대하여 알아보겠습니다.
배열이란?
연속적인 항목들이 동일한 크기의 순서를 갖고 나열되어 있는 데이터의 집합
입니다.
배열을 구성하는 각각의 값을 배열 원소(element) ,
배열에서의 위치를 가리키는 숫자를 첨자(subscript) 또는 인덱스(index) 라고 합니다.
일차원 배열은 배열명 다음에 구두점 대괄호 [] 를 사용하며 대괄호 안에 배열의 크기를 나타내는 수를 하나 씁니다.
배열명을 만드는 규칙은 변수명을 만드는 규칙과 동일합니다.
예를 하나 들어보겠습니다.
int example[3];
먼저, 저는 example이라는 배열명을 만들었습니다. 대괄호 안에는 3을 넣었지요.
배열 선언문에서 사용하는 첨자는 양의 정수이며, 배열의 크기를 나타냅니다.
그러므로 example배열은 정수형 자료 3개를 저장할 수 있게 된것입니다.
이때 3개의 공간을 배열의 원소(element)라고 합니다.
비쥬얼 스튜디오에서 한 번 실행해 보겠습니다.
무언가 하나 신기한 점이 있지 않나요?
배열 원소의 첨자 순서가 바로 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문자를 제외하고 원소의 개수를 사용한 소스는 디버그 오류가 난다는 점을 알 수 있었습니다.
(원소의 개수는 생략이 가능합니다. )
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학기)한성현교수 강의 내용 변형 및 요약