인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

myppy2628님의 프로필 이미지

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

(기출) 2024년 2회 기출문제 - 이론 포함

2024년 필기 2회 04분11초에 나오는 문제 질문 드립니다.

해결된 질문

작성

·

120

·

수정됨

0

int arr[3][3] 은 3x3 행렬이라 이렇게 그려지는 것은 이해했습니다.
int arr [3][3]
arr[0] = [1, 2, 3]
arr[1] = [4, 5, 6]
arr[2] = [7, 8, 9]
여기에서 arr[0] 을 100번지 주소, arr[1]을 200번지 주소, arr[3]을 300번지 주소라고 가정을 해보겠습니다.
이때 int parr[2]가 강사님께서 말씀하신게 포인터 두개를 담은 배열이라고 하셨는데 이 부분이 잘 이해가 안가서요.
포인터 두개를 담은 배열이라고 하신다면 int parr[2]에는
arr[1] 이라는 200번지 주소, arr[2] 이라는 300번지 주소가 담긴거고, 이때 parr을 행렬로 만들게 되어서 parr은 다음과 같이 되어서 정답을 유도하게 되는건가요?
int parr [2][3]
parr[0] = [4, 5, 6]
parr[1] = [7, 8, 9]

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 일단 포인터 변수를 알아보기가 어렵네요. 글 에디터가 * 을 쓰게되면 이탤릭체로 폰트를 바꿔버려서 그런가봅니다.

 

int parr[2]에 각각의 주소가 들어간 것은 맞습니다만,

parr[0]이 [4, 5, 6]인 것은 아닙니다.

 

주의하셔야 할 것이 배열 자체에 포인터가 들어가 있는 것이기 때문에 parr[0], parr[1]은 각각이 포인터로 그 자체의 값이 다른 무언가의 주소를 가지고 있는 것입니다.

 

그래서 정확히 말하자면,

parr[0]은 arr[1][0]의 값에 해당하는 주소를 가지고 있고

parr[1]은 arr[2][0]의 값에 해당하는 주소를 가지고 있습니다.

(이것의 주소를 질문에서 주신 것처럼 각각 200, 300이라고 가정한 것이라면 맞는 말입니다.)

 


여기서

parr[1]은 arr[1]의 시작주소, 값으로 따지면 4를 뜻하고

parr[2]는 arr[2]의 시작주소, 값으로 따지면 7을 뜻합니다.

 

거기서 한 칸 더 간 것을 parr[1][1]로 보시면 되고 값이 8이 되는 것입니다.

 

이해하시는 방법이 결국은 정답은 맞습니다만,

 

실제로 포인터 배열이 배열 전체의 주소를 갖는다거나 이렇지는 않고, 그냥 해당 주소 하나만 가지고 있기 때문에 괜히 헷갈리실까봐 그렇습니다.

0

인프런 AI 인턴님의 프로필 이미지

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

질문해주신 배열과 포인터의 구조를 이해하는 데 도움을 드리겠습니다. 기존에 제시된 예제를 통해 int arr[3][3] 배열에 대한 설명이 있었습니다. arr[0], arr[1], arr[2] 각각이 첫 번째, 두 번째, 세 번째 행을 가리키고 있는 것은 맞습니다.

이제 포인터 배열인 int *parr[2] 의 개념을 이해해 보겠습니다:

  1. int *parr[2] 는 ‘포인터들이 담긴 배열’을 의미합니다. 이는 두 개의 int 형 포인터를 담고 있는 배열입니다.

  2. parr[0]parr[1]arr 의 특정 행을 가리킬 수 있습니다. 예를 들어 초기화가 parr[0] = arr[1]; 그리고 parr[1] = arr[2]; 라면, 각각의 포인터는 2차원 arr 배열의 다른 행을 가리킵니다. 따라서, 다음과 같이 포인터 배열을 사용할 수 있습니다:

    • parr[0]arr[1] 의 첫 번째 요소 4 를 시작으로 [4, 5, 6] 을 포함합니다.
    • parr[1]arr[2] 의 첫 번째 요소 7 을 시작으로 [7, 8, 9] 을 포함합니다.

이렇게 함으로써, 포인터 배열 parr 은 행렬의 일부 행을 참조하는 포인터들의 배열이 됩니다.

관련하여 이해를 높일 수 있는 질문과 답변 링크를 제공합니다:

  • C언어 포인터 배열 - 이 질문에서는 포인터 배열에 관한 개념을 자세히 설명하고 있어 꼭 참조해 보시면 좋을 것입니다.

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