배열의 원리 이해하기
프로그램 안에서 많은 데이터를 처리하는 경우에 사용한다. 예를 들어 50명의 학생이 있는 반의 시험 점수를 다루는 프로그램이 있다면, test1 부터 test 50까지 총 50개의 변수를 일일이 준비해야 한다. 이 경우 코드가 복잡해지고 읽기 어려워지기 때문에 배열(array)이라는 메커니즘을 활용하여 편리하게 코드를 작성할 수 있다.
배열은 같은 형의 값을 동시에 여러 개 기억하기위한 편리한 기능을 제공한다.
배열은, 같은 이름을 가진 상자들이 모여서 줄 지어 있는 모습을 상상해 보면 된다.
배열에 저장된 각각의 상자는 배열의 요소(element)라고 한다.
배열 선언하기
형명 배열명[요소 개수];
예를 들어, int형 값을 5개 기억할 수 있도록 요소 개수를 5라고 지정한 배열 test[5]를 선언해 보면,
int test[5]; // int형 값을 5개 저장할 수 있는 배열 5개를 선언
배열의 요소 개수는 반드시 미리 알고 있어야 한다. 즉, []안에 들어올 수 있는 수는 5나 10같은 고정된 수(상수)이다.
준비가 완료된 각 배열 상자(요소)에는 다음과 같은 이름이 각각 붙여진다.
test[0];
test[1];
test[2];
test[3];
test[4];
[]안에 들어간 번호는 첨자(인덱스: index)라고 한다. 이 첨자를 사용하면 배열 안의 특정 상자를 가리킬 수 있다.
C++배열의 인덱스는 0부터 시작하므로 마지막 첨자는 '요소 수 - 1'이 된다. 즉, 5개의 요소를 가지는 배열이라면 test[4]가 값을 저장할 수 있는 마지막 요소가 된다.
배열 요소에 값 대입하고 출력하기
배열 요소에 하나하나 값을 대입해 보자. int형 배열 상자에는 정수값을 저장할 수 있다.
배열명[index] = 식;
배열 초기화하기
배열이란?
: 배열은 첫 주소를 담는 포인터이다.
문자열과 배열의 관계 이해하기
문자열이란, "Hello" 와 같은 연속된 문자이다.
C++에서는 이같은 영문자 문자열을 'char형 배열'로 다루는 기능을 갖추고 있다.
'char'형은 '문자'를 표현하는 형(type)이다. 문자열은 연속된 문자이므로, 문자형 배열로 간주할 수 있는 것이다.
예를 들어 위의 "Hello"라는 문자열은 다음과 같이 문자형 배열로 다룰 수 있다.
char형 배열을 선언하고 각 요소에 문자를 하나씩 대입한다. 이제 배열 str[]로 " Hello"라는 문자열을 다룰 수 있다.
비열 마지막에 대입한 '\0'의 정체는 Null 문자(Null character)이다. C++에서는 문자열의 마지막을 표현하기 위해서
반드시 문자열의 마지막에 '\0'을 붙여라
는 규정이 있다. 따라서 배열을 선언할 때 이 '\0'가 들어갈 배열요소도 준비해 주어야 하니 주의가 필요하다.
즉, 최소한 '문자열의 길이+1' 개분의 요소가 필요하다는 것이다.
문자열 배열 초기화하기
문자열은 다음과 같이 초기화하여 char형 배열에 저장시킬 수 있다.
문자열의 경우 위와 같이 " "로 묶어 초기화시키기를 지원한다.
다만 " "와 같은 저장 방법은 초기화시킬 때에만 사용할 수 있고,
" "로 묶은 문자열을 따로 대입할 수는 없으니 주의가 필요하다.
// str = "Hello"; // 이와 같은 대입은 에러가 난다!
문자열 배열 출력하기
cout에 <<기호를 사용하여 위와 같이 작성하면 문자열 전체가 출력된다.
문자열을 포인터로 다루기
문자열을 다룰 때 배열을 사용할 수도 있지만, char형 포인터를 사용할 수도 있다.
char형 포인터를 사용한 코드는 다음과 같다.
이 경우의 str은 char형 포인터인 점에 유의해야 한다. 문자열을 포인터에 저장시킬 경우에 " "를 사용하면, 메모리 어딘가에 문자열이 저장되고 포인터는 그 위치를 가리키게 된다.
문자열을 char형 포인터로 다룰 경우에도 문자열을 출력할 수 있다.
배열과 포인터의 차이점
포인터를 배열로 다루거나 포인터로 다룰 때에는 주의할 점이 있다...
배열에 문자열을 한번 대입하면 다시 대입할 수 없지만, 포인터에는 문자열을 여러번 대입할 수 있다!!
이 코드의 첫 번째 줄에서 str이 "Hello"를 가리키게 만들었다. 두 번째 줄에서는 str이 "Goodbye"를 가리키게 만들었다. 포인터에 문자열을 대입한 경우에는 문자열이 메모리 어딘가에 저장되고, 포인터에는 문자열의 첫 번째 문자의 주소만 저장되므로 포인터가 가리키는 문자열은 얼마든지 변경시킬 수 있는 것이다.
또한 문자열을 입력받을 경우에는 배열을 선언해서 문자열을 저장시킬 영역을 충분하게 확보해야 한다.
문자열 조작하기
문자열이 배열이라는 사실을 이용해서 문자열을 조작하는 코드를 만들어 보자.
다음 코드는 배열 str[]에 저장된 문자열 "Hello"의 각 문자 사이에 *이라는 기호를 삽입시킨 후 출력한다.
C++ 문자열은 \0로 끝나기 때문에 배열 str[]의 요소에 \0가 나올 때까지 *을 삽입하면서 반복 출력을 할 수 있다.
이렇게 문자열을 다루는 코드는 마지막 문자가 \0이라는 사실을 이용한다. 이처럼 문자열에 다른 기호를 넣거나 탐색하는 연습을 통해 문자열에 익숙해 질 수 있다.
참고) 문자열로 별찍기, 다이아몬드 만들기
문자열을 다루는 표준 라이브러리 함수 <string>
'C++ 코딩 > C++ 기초개념' 카테고리의 다른 글
<C++ 기초> 식과 연산자, 연산자의 종류와 우선순위 (0) | 2021.02.23 |
---|---|
<C++ 기초> 동적배열, sti vector, 멤버함수 (0) | 2021.02.18 |
<C++ 기초> typedef, 열거형 enum (0) | 2021.02.16 |
<C++ 기초> 문자열 조작하기 -char[], string (0) | 2021.02.15 |
<C++ 기초> 메모리 동적 확보, 배열의 동적인 확보 (0) | 2021.02.14 |
<C++ 기초> 변수와 스코프(지역변수와 전역변수) 02.14 (0) | 2021.02.14 |
<C++ 기초> 메모리 구조 힙, 스택, 데이터, 코드 (0) | 2021.02.09 |
<C++ 기초> 포인터와 레퍼런스(* , &) 02.04 (0) | 2021.02.04 |