• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

포인터 배열

23.08.11 21:35 작성 조회수 195

1

이런 식으로 배열을 초기화 하게 되면, matrix에는 첫번째 원소의 주소만 저장이 되지만, 컴퓨터 내부에서는 row * col개의 원소 만큼의 주소를 matrix에 할당해주는 것인지 궁금합니다.

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

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 개의 원소에 접근할 수 있는 것입니다.