C++ Chapter 6.11 : 동적 할당 배열

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


정적 배열

const int length = 5;
int array[length];

반드시 배열의 크기가 프로그램이 실행되기 전에 미리 컴파일 타임에 정해져야 한다. 프로그램 실행 전에 미리 공간을 할당 받기 때문!

  • 배열의 크기를 리터럴 상수가 아닌 변수로 넣고 싶으면 const가 붙은 변수, 즉 상수여야 한다.
  • 정적 배열은 주소를 바꾸는 것이 불가능하다.
    • array의 배열 이름은 array를 주소를 담고 있는 상태. 다른 배열의 주소를 담게끔 값을 바꿀 수 없다.


동적 배열

#include <iostream>

using namespace std;

int main()
{
	int length;
	cin >> length;  // 실행 중에 입력으로 결정된 크기

	int* array = new int[length]; // 동적할당 

	for (int i = 0; i < length; ++i) // 원소 대입
		cout << *(array + i) << "\t"; // array[i] 로 해도 괜춘

	delete [] array; // 메모리 해제 잊지말기
}

int* array = new int[length];

  • 배열의 크기가 될 length 값은 실행 중 입력으로 결정되므로 이를 크기로 하는 정적 배열 생성은 불가능한 상황.
  • 동적으로 int * length 메모리 크기의 배열을 할당받아 이의 주소를 array에 저장. 현재 원소들은 쓰레기값.
    int* array = new int[length]();
    

    이렇게 뒤에 (){}를 붙여주면 원소가 0으로 초기화가된 동적 배열을 할당 받을 수 있다.

    int* array = new int[length]{1, 2, 3, 4, 5};
    

    이렇게도 초기화 가능한데 단 이 경우엔 메모리에 요청한 length와 초기화된 원소의 개수가 동일해야 한다.

    • 정적 할당시에는 []를 채우지 않아도 초기화된 원소의 개수를 보면 크기를 알 수 있으므로 괜찮았는데 동적 할당시에는 [] 배열의 크기를 반드시 지정해주어야 한다. 초기화와 상관 없이.
  • array는 다른 메모리 영역을 가리킬 수 있다. 즉 정적 배열과 다르게 주소를 바꾸는 것이 가능하다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기