🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

동적 다차원 배열 관련 질문

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) )이런 식으로 한 줄이면 끝났거든요. 

질문이 좀 많지만 답변해주시면 정말 감사하겠습니다!  

답변 1

답변을 작성해보세요.

0

좋은 질문인데, 해당 강의(해당 영상)에서 질문을 올리실 때만 답변해드리고 있습니다.

자세한 내용은 아래 참고하시고 다시 제대로된 위치에 올리시면 도와드리겠습니다.

https://blog.naver.com/atelierjpro/221547580916

채널톡 아이콘