arr 자체의 값이 0000000FE51EF768, arr[0]의 주소가 0000000FE51EF768이라고 나오네요. arr 자체가 가지는 값과 arr 배열 첫 번째 요소의 주소가 같음을 확인할 수 있습니다.
앞에서 포인터 변수 ptr에 arr을 넣은 이유도 이와 같습니다. 포인터 변수 ptr에 arr을 넣으면 ptr도 arr 배열의 첫 번째 주소를 값으로 가지므로 배열의 요소에 접근해 값을 읽어 오거나 바꿀 수 있습니다.
그럼 arr 자체의 값인 주소에 담긴 실제 값은 뭘까요? 한번 출력해 봅시다. 먼저 arr의 값은 주소이므로 주소의 값을 출력하려면 앞에 *를 붙여야겠죠. 그리고 arr의 값은 arr[0]의 주소라고 했습니다. 비교할 수 있게 arr[0]의 주소에 들어 있는 값도 출력해 보겠습니다. arr[0]의 주소는 &를 붙이면 알 수 있고 주소의 실제 값은 *으로 알 수 있으니 다음과 같이 작성합니다.
printf("arr 자체의 값인 주소의 실제 값 : %d\n", *arr);
printf("arr[0]의 실제 값 : %d\n", *&arr[0]);
실행결과 |
arr 자체의 값인 주소의 실제 값 : 100 arr[0]의 실제 값 : 100 |