-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
ptr[k]는 *(redirection)의미를 내포하고 있는것인가요 ?
19.12.24 17:49 작성 조회수 135
8
교수님 오랜만에 질문남깁니다. 바쁘시다면 맨 아래 질문을 요약해 두었습니다.
int main()
{
int arr[2][3] = { {1,2,3}, {4,5,6} };
int* ptr = &arr[0][0];
for (int k = 0; k < 6; ++k)
printf("%d ", ptr[k]);
printf("\n\n");
printf("%zd %zd\n", sizeof(arr), sizeof(arr[0]));
printf("\n");
}
8분대에 위 코드를 설명해주실 때 ptr[k]를 보면서 ptr앞에 *가 없으니 주소가 출력되겠구나 생각하고 있었는데, 1,2,3,4,5,6이 출력되어서 혼동이 왔습니다.
int *ptr = &arr[0][0]으로 ptr은 arr의 메모리 주소를 가지고 있고 ptr[k]에서 *를 달아주지 않았음에도 arr의 배열Value를 출력시키고 있는것은 ptr[k]에서 자동적으로 redirection을 해주고 있는것인지 궁금합니다.
*가 생략된걸까 해서 *ptr[k]도 똑같이 작동하지 않을까? 해서 시도 해보았으나 피연산자 오류가 떴습니다. ptr[k]는 포인터가 아님을 컴파일러가 지적해 준것 같습니다.
포인터의 index기능?(이 단어가 맞는지 모르겠습니다)을 혹시 설명해 주셨는데 제가 놓친건지요..?
질문을 간단히 요약하겠습니다.
Q. printf("%d ", ptr[k]); 에서 *이 없음에도 array의 value가 출력되는 것은 ptr[k]에 indirection 기능이 내포된 것인가요 ?
감사합니다.
답변을 작성해보세요.
3
홍정모
지식공유자2019.12.26
간단히 정리하면 2차원도 내부적으로는 메모리에 1차원 배열 형태로 저장되고 위의 포인터는 그 주소를 가져오기 때문에 1차원 배열처럼 인덱싱하는 겁니다. 다차원 배열 인덱싱은 동적할당에 나와요.
3
홍정모
지식공유자2019.12.25
혼동하기 쉬운 부분이네요. Indirection을 내포하고 있다기 보다는 메모리 주소 체계를 생각해보면 2차원 배열도 결국은 내부적으로는 1차원배열이라는 점과 연결시키셔야 합니다. 동적할당 메모리를 다차원 배열처럼 사용하는 방법에 대한 강의를 참고하시면 도움이 될 것 같습니다.
0
답변 3