해결된 질문
작성
·
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 인턴입니다. myppy2628님.
질문해주신 배열과 포인터의 구조를 이해하는 데 도움을 드리겠습니다. 기존에 제시된 예제를 통해 int arr[3][3]
배열에 대한 설명이 있었습니다. arr[0]
, arr[1]
, arr[2]
각각이 첫 번째, 두 번째, 세 번째 행을 가리키고 있는 것은 맞습니다.
이제 포인터 배열인 int *parr[2]
의 개념을 이해해 보겠습니다:
int *parr[2]
는 ‘포인터들이 담긴 배열’을 의미합니다. 이는 두 개의 int
형 포인터를 담고 있는 배열입니다.
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
은 행렬의 일부 행을 참조하는 포인터들의 배열이 됩니다.
관련하여 이해를 높일 수 있는 질문과 답변 링크를 제공합니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.