알고리즘/문제해결을 위한 C++ 공부
(14) C++ 2차원 배열
Storage Gonie
2019. 4. 27. 09:48
반응형
# 배열 선언방법
@ 정적배열
// N * M 행렬
int arr[3][5];
// N * M 행렬
int arr[3][5] = {{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}};
// 배열 선언시 왼쪽인자를 생략할 수 있음. (오른쪽 인자는 생략 불가, 둘다 생략하는 것도 불가)
int arr[][5] = {{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}};
@ 동적배열
- 아직까진 사용할 일이 없었어서 학습 보류(동적할당이 필요한 이유 포함)
// 1차원 배열 할당받는 방법
int width = 8;
int *arr;
arr = (int *) malloc ( sizeof(int) * width ); // 동적으로 할당받은 메모리도 배열처럼 접근이 가능함 arr[0], arr[1],,,
// 2차원 배열 할당받는 방법
int height = 6, width = 8;
int **arr;
arr = (int**) malloc ( sizeof(int*) * height );
for(int i=0; i<height; i++){
arr[i] = (int*) malloc ( sizeof(int) * width );
}
//
for(int i=0; i<height; i++){
free(arr[i]);
}
free(arr);
출처: https://codeng.tistory.com/8 [도전!]
# 다양한 배열 초기화 방법(입력으로 배열값 초기화 포함)
@ 초기화값 지정
// 배열의 크기보다 적은 초기화 값이 있으면 나머지 요소는 0으로 초기화된다.
int arr[3][5] = {{1, 2, 3},
{6, 7},
{11}};
// 위의 원리로 다차원 배열의 원소를 모두 0으로 초기화 할 수 있다.
int arr[3][5] = {0};
@ 사용자 입력으로 입력받기
// 초기화 시킬 값만 입력받는 방법
int arr[3][5];
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
scanf("%d", &arr[i][j]);
}
}
// 배열의 크기부터 값까지 모두 사용자 입력으로부터 입력받는 방법
int a;
int b;
scanf ("%d %d", &a, &b);
int arr[a][b]; // a, b를 입력받는 scanf 이후에 있어야 오류가 없다.
for (int i = 0; i < a; i++){
for(int j = 0; j < b; j++){
scanf("%d", &arr[i][j]);
}
}
# 배열의 크기 구하는 방법
// N * M 행렬
int arr[3][5] = {{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}};
int row = sizeof(arr) / sizeof(arr[0]); // 3 : 행 크기
int column = sizeof(arr[0]) / sizeof(int); // 5 : 열 크기
반응형