고정 배열(fixed array) vs 동적 배열 (dynamic array)
출처 : https://boycoding.tistory.com/194
배열의 모든 요소를 0으로 초기화 하는 방법 :
int arr[5] = {};
int brr[5] = {0};
인덱스의 명칭 : enum의 사용
#include <iostream>
using namespace std;
enum StudentNames
{
Kim, //0
Lee, //1
Park, //2
Choi, //3
MAX_STUDENTS //4
};
int main(){
int scores[MAX_STUDENTS];
scores[Kim] = 100;
cout<<scores[Kim]<<endl;
return 0;
}
동적으로 배열 할당 : 런타임 동안에 배열 길이를 선택할 수 있음.
동적으로 배열을 할당하려면 new[] 연산자와 delete[] 연산자를 사용해야 함.
#include <iostream>
using namespace std;
int main(){
int length;
cin >> length;
int *arr = new int[length];
for(int i=0;i<length;i++){
arr[i] = 1;
}
delete[] arr;
return 0;
}
주의 : 해제시 delete[] 대신 delete 로 할 시 데이터 손상, 메모리 누수, 충돌 또는 기타 문제와 같은 정의되지 않은 동작이 발생함.
동적 배열 초기화
C++ 11 버전 부터 동적 배열을 0으로 초기화 하는 문법이 생김. ()를 잘 이용하자.
int *arr = new int[length]();
동적 배열은 명시적으로 길이를 설정해 선언해야 한다.
int *arr1 = new int[]{1,2,3}; // X
int *arr2 = new int[3]{1,2,3}; // O
1.동적 배열 :
동적할당 : 사용자로부터 이름을 입력 받아 출력받는 프로그램 예)
//동적 메모리 할당
#include <stdio.h>
#include <stdlib.h>
//사용자로부터 이름을 입력 받아 출력하는 프로그램을 생각해보자.
int main() {
char name[128]; //어플리케이션 버퍼
printf("input name: ");
scanf("%s", name);
//동적 할당 수행
char *p = malloc(sizeof(char)*(strlen(name) + 1));
// ^-----ACILL NULL (char의 맨 끝은 \0 이기 때문)
strcpy(p, name);
printf("-> %s\n", p);
free(p);
return 0;
}
2차원 배열의 동적할당 :
int arr[3]; //정적 배열, 스택에 생성됨
//1차원 배열의 동적 할당
int* p = malloc(sizeof(int) * 3); // int[3] in heap
char *p2 = (char*)p; // char[12] in heap
//2차원 배열의 동적 할당
int arr2[2][3]; //정적 배열
int(*p3)[3] = malloc(sizeof(int) * 2 * 3);