-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
동적 다차원 배열 관련 질문
20.03.12 04:59 작성 조회수 113
0
안녕하세요 강의 잘 듣고 있습니다.
6.19 강의를 듣는 중에 의문이 생겨서 질문 드립니다.
2차원 배열을 동적 할당 할 때에
const int row = 3;
const int col 5;
int **matrix = new int*[row];
for (int r = 0; r < row; ++r)
matrix[r] = new int[col];
위와 같이 예를 들어 주셨는데요.
이중 포인터를 이용해서 2차원 배열 matrix가 어떻게 정의 되는지는 이해를 하였지만
new int*[row] 부분에서 int와 [row] 사이의 *는 무엇을 의미하는 건가요? *[]형태는 처음 보는 것 같아서요.
그냥 new int[row]로 해도 머릿속에선 될 것 같은데 컴파일 해보면
initializing: cannot converet from 'int *' to 'int **' 이라고 나오네요.
또 메모리 저장되는 것 관련해서도 의문점 이있습니다.
그냥 정적할당으로 matrix[row][col]; 이런식으로 정의를 하면
matrix[0][0], matrix[1][0], matrix[2][0] 이 딱 메모리 주소가 20씩 차이나서 연달아 있는데
new를 이용해서 동적할당으로 배열을 정의하면 메모리 주소가 좀 뒤죽박죽이더라구요.
이렇게 되면 큰 배열을 이용해서 실제 계산을 할 때 좀 비효율적이 되지 않나요? 연속적으로 하려면 어떤 식으로
동적 할당을 해야 하나요?
그리고 비슷한 식으로 3차원 배열도 만들어 보았는데요.
d3[nx][ny][nz]인 3차원 배열을 만들기 위해
int ***d3 = new int**[nx];
for (int i = 0; i < nx; ++i)
{
d3[i] = new int*[ny];
for (int j = 0; j < ny; ++j)
d3[i][j] = new int[nz];
}
위와 같이 만들어서 제대로 나오는 것도 확인 했습니다.
문제는 안되지만, 배열 할당하는것치고 조금 코드 자체가 긴것같아서요.. 혹시 조금 더 깔끔하게 만드는 법이 있을까요?
fortran 같은 경우에는 그냥 allocate( d3(nx, ny, nz) )이런 식으로 한 줄이면 끝났거든요.
질문이 좀 많지만 답변해주시면 정말 감사하겠습니다!
답변을 작성해보세요.
0
홍정모
지식공유자2020.03.12
좋은 질문인데, 해당 강의(해당 영상)에서 질문을 올리실 때만 답변해드리고 있습니다.
자세한 내용은 아래 참고하시고 다시 제대로된 위치에 올리시면 도와드리겠습니다.
답변 1