-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
포인터 배열
23.08.11 21:35 작성 조회수 195
1
이런 식으로 배열을 초기화 하게 되면, matrix에는 첫번째 원소의 주소만 저장이 되지만, 컴퓨터 내부에서는 row * col개의 원소 만큼의 주소를 matrix에 할당해주는 것인지 궁금합니다.
답변을 작성해보세요.
2
Soobak
2023.08.11
안녕하세요, 답변 도우미 Soobak 입니다.
네, 적절히 이해하신 것 같습니다.
조금 부연 설명을 드려보자면 다음과 같습니다.
new
연산자를 사용하여 동적으로 메모리를 할당하면, 그 메모리의 첫 번째 주소가 반환됩니다.
따라서, int matrix = new int[row col];
의 코드 라인에서 matrix
는 할당된 메모리의 첫 번째 주소를 가리킵니다.
new int[row * col]
은 row * col
만큼의 int
자료형의 메모리 공간을 연속적으로 할당하게 되므로,
이 메모리 공간의 크기는 sizeof(int) * row * col
바이트가 됩니다.
이렇게 할당된 메모리의 첫 번째 주소가 matrix
에 저장되며, 이 주소를 기반으로 다른 원소들의 주소에 접근할 수 있습니다.
이런 방식으로 2차원 배열처럼 사용할 수 있지만, 인덱싱을 할 때는 1차원 배열처럼 접근해야 합니다.
예를 들어, 2차원 배열의 (r, c)
위치의 원소에 접근하려면 matrix[c + col * r]
로 접근할 수 있습니다.
즉, matrix
변수에는 첫 번째 원소의 주소만 저장되지만,row * col
만큼의 int
자료형의 메모리 공간을 연속적으로 할당하게 되므로,
첫 번째 주소를 기반으로 row * col
개의 원소에 접근할 수 있는 것입니다.
답변 1