동적 다차원 배열 관련 질문
188
작성한 질문수 2
안녕하세요 강의 잘 듣고 있습니다.
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
좋은 질문인데, 해당 강의(해당 영상)에서 질문을 올리실 때만 답변해드리고 있습니다.
자세한 내용은 아래 참고하시고 다시 제대로된 위치에 올리시면 도와드리겠습니다.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
466
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
499
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
679
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
549
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
443
1
Digit 뒤에 reference를 사용하는 이유
0
510
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
323
1
dat파일이...
0
539
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
644
1
복사 생성자 관련 질문이 있습니다.
0
454
1
수업 중 궁금한점이 있습니다.
1
390
1
라이브러리자체가 이해가 되지 않습니다.
0
561
1
마지막 예제 질문
0
302
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
375
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
411
1
friend함수 관련 질문이 있습니다.
0
312
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
448
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
445
2
const Something &st에서 const를 빼면 안되나요?
0
300
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
493
1





