강의

멘토링

커뮤니티

Inflearn Community Q&A

dhkdxo123896's profile image
dhkdxo123896

asked

(2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week

Multidimensional Arrays and String Arrays

다차원 배열에서 포인터 변수 주소 이동 관련

Resolved

Written on

·

33

0

다차원 배열과 문자열 배열 1:14

예를 들어, {2, 4, 8, 10, 12} 라는 배열이 있을 때

포인터 p 변수 경우 *(p+4)를 하면 12가 답이 됩니다.

 

하지만 아래와 같이 다차원 배열 일 때

{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}

*(p+4)를 하면 답이 어떻게 되는지 궁금합니다.

pythonjavac정보처리기사정보처리산업기사

Answer 2

0

weekendcode님의 프로필 이미지
weekendcode
Instructor

안녕하세요, 질문 주신 다차원 배열을 아예 처음부터 설명하겠습니다.

 

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

```
메모리상에는 이렇게 일렬로 저장됩니다:

```
인덱스:  [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

값:       1   2   3   4   5   6   7   8   9  10   11   12

 

다차원배열이든 일반 배열이든 우리 머릿 속에서는 행렬이니 뭐니로 정리하지만

컴퓨터에서는 그런 건 모르겠고 메모리에 일단 다 연속으로 넣습니다.

 

다차원 배열은 선언하는 포인터 단위가 매우 중요합니다.

만약, 아래처럼 선언을 한다고 치면

int *p = &arr[0][0];  // 또는 (int *)arr

p가 첫번째 요소를 가리키기 때문에, *(p+4)는 인덱스 4인 5의 값을 가집니다.

 

요약하자면, 아래 코드의 출력값은 5입니다.

#include <stdio.h>

int main() {
    int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int *p = &arr[0][0];  // 또는 (int *)arr

    printf("%d\n", *(p + 4));  // 결과: 5

    return 0;
}

 

0

안녕하세요, 인프런 AI 인턴입니다. dhkdxo12님.

질문하신 내용은 1차원 배열과 다차원 배열에서 포인터의 동작에 대한 이해를 필요로 합니다. 이러한 내용은 C 언어 프로그래밍에서 매우 중요하죠. 각각의 경우를 살펴보겠습니다.

1차원 배열의 경우

1차원 배열 int arr[] = {2, 4, 8, 10, 12}; 에서 포인터 p를 선언하면, *(p+4)arr[4]를 가리켜 12로 접근합니다. 이때 포인터는 int 형의 크기인 4바이트씩 이동하기 때문에 (p+4)는 네 칸을 이동하여 arr[4]로 이동하게 됩니다.

2차원 배열의 경우

다차원 배열은 약간 다르게 작동합니다. 예를 들어 int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 와 같은 2차원 배열이라면 *(p+4)의 경우, 포인터가 배열의 첫 번째 요소로부터 4개의 int 타입 요소 이후를 참조하게 됩니다. 즉, arr[0][4]에 해당하지만 이는 유효 범위를 벗어나기 때문에 참조되지 않고, 실제 유효한 곳은 arr[1][0], 즉 5가 됩니다.

이와 같은 포인터 배열의 산술 연산은 각각의 요소에 접근할 때 기준이 되는 바이트 크기와 배열의 차원에 따라 달라집니다. 이 부분을 명확히 이해하면, 다차원 배열에서의 포인터 산술 연산을 더욱 쉽게 이해할 수 있습니다.

관련된 설명은 다음 링크에서도 확인해 보실 수 있습니다:

저는 dhkdxo12님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dhkdxo123896's profile image
dhkdxo123896

asked

Ask a question