C++ 배열

Six Root·2022년 9월 24일

C++ 공부

목록 보기
2/10
post-thumbnail

배열

배열(array)이란?

배열(array)은 같은 타입의 변수들로 이루어진 유한 집합으로 정의할 수 있다.
배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 한다.
C++에서 인덱스는 언제나 0부터 시작하며, 0을 포함한 양의 정수만을 가질 수 있다.

1차원 배열

  • 문법
타입 배열이름[배열길이];

타입은 배열 요소로 들어가는 변수의 타입을 명시한다.
배열 이름은 배열이 선언된 후에 배열에 접근하기 위해 사용된다.
배열의 길이는 해당 배열이 몇 개의 배열 요소를 가지게 되는지 명시한다.
열은 선언만 하고 초기화하지 않으면, 모든 배열 요소가 쓰레깃값으로 채워진다.


배열의 특징

C++에서 배열은 다음과 같은 특징을 가진다.

  1. 배열의 길이를 선언할 때에는 반드시 상수*를 사용해야 한다.
  2. 배열 요소의 인덱스는 언제나 0부터 시작한다.
  3. C++ 컴파일러는 배열의 길이를 전혀 신경 쓰지 않는다.

*상수는 타입에 따라 정수형 리터럴 상수, 실수형 리터럴 상수, 문자형 리터럴 상수 등으로 구분할 수 있다.

  1. 정수형 리터럴 상수는 123, -456과 같이 아라비아 숫자와 부호로 직접 표현된다.
  2. 실수형 리터럴 상수는 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현된다.
  3. 문자형 리터럴 상수는 'a', 'Z'와 같이 따옴표(' ')로 감싸진 문자로 표현된다.
  • 실습 예제
int main()
{
	char name[10];
	int age;
	char place[20];
	char dream[20];

	std::cout << "이름이 무엇입니까?: ";
	std::cin >> name;

	std::cout << "사는곳은 어디입니까?: ";
	std::cin >> place;

	std::cout << "나이는 몇살입니까?: ";
	std::cin >> age;

	std::cout << "꿈이 무엇입니까?: ";
	std::cin >> dream;

	std::cout << place << "에 사는 " << age << "살 " << name << "입니다. 저는 " << dream << "가 되고 싶습니다." << std::endl;
}

배열의 선언과 동시에 초기화하는 방법

  • 문법
타입 배열이름[배열길이] = {배열요소1, 배열요소2, ...};

괄호({ })를 사용하여 초깃값을 나열한 것을 초기화 리스트라고 한다.
초기화 리스트의 타입과 배열의 타입은 반드시 일치해야 한다.
만약 초기화 리스트의 개수가 배열의 총 길이보다 적으면, 배열의 앞에서부터 차례대로 초기화될 것이다.
이때 초기화되지 못한 나머지 배열 요소는 모두 0으로 초기화된다.

  • 실습 예제
int main()
{
	char a[5] = { 'H','E','L','L','O' };

	for (int i = 0; i < 5; i++)
	{
		std::cout << a[i];
	}
}
  • 실행 결과
HELLO

배열의 길이를 따로 입력하지 않은 배열은 초기화 리스트의 배열 요소 개수에 맞춰 자동으로 배열의 길이가 설정됩니다.

  • 예제
int arr[] = {1, 2, 3};

위의 예제에서 int형 배열 arr의 길이는 자동으로 3으로 설정됨과 동시에 초기화 리스트에 의해 초기화된다.


배열이 차지하는 메모리의 크기

C++에서 배열을 복사하거나 배열 요소에 특정 작업을 하고 싶을 때는 해당 배열이 차지하는 메모리의 크기를 정확히 알고 있는 것이 좋다.

배열이 차지하는 총 메모리의 크기는 다음 수식을 사용하여 구할 수 있다.

  • 수식
배열이 차지하는 메모리의 크기 = 배열의 길이 X sizeof(타입)

배열의 길이를 알고 싶을 때에는 다음 수식을 사용하여 구할 수 있다.

  • 수식
배열의 길이 = sizeof(배열 이름) / sizeof(배열 이름[0])
  • 예제
int grade[] = {85, 65, 90}; // 배열의 길이를 명시하지 않음

int len = sizeof(grade) / sizeof(grade[0]); // 배열의 길이를 구하는 공식

cout << "배열 grade의 길이는 " << len << "입니다.";
  • 실행 결과
배열 grade의 길이는 3입니다.

for 문을 활용한 배열

for문과 배열을 사용해서 여러개의 값을 선언할 수 있다

  • 실습 예제
int main()
{
	int intArray[5] = { -2,23,-4,25,-6 };
	int arraySum = 0;

	std::cout << "for문 전 arraySum 값: " << arraySum << std::endl;
	for (int i = 0; i < 5; i++)
	{
		arraySum += intArray[i];
		std::cout << "for문 속 arraySum["<<i<<"] 값: " << arraySum << std::endl;
	}
	std::cout << "for문 후 arraySum 값: " << arraySum << std::endl;
}
  • 실행 결과
for문 전 arraySum 값: 0
for문 속 arraySum[0]: -2
for문 속 arraySum[1]: 21
for문 속 arraySum[2]: 17
for문 속 arraySum[3]: 42
for문 속 arraySum[4]: 36
for문 후 arraySum 값: 36

※참고: http://www.tcpschool.com/

profile
언리얼 전문가가 될 때까지 (중요한 건 꺾이지 않는 마음)

0개의 댓글