해결된 질문
작성
·
172
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 기능이 내포된 것인가요 ?
감사합니다.