강의

멘토링

로드맵

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

의지님의 프로필 이미지
의지

작성한 질문수

홍정모의 따라하며 배우는 C++

6.8 포인터와 정적 배열

포인터 자체의 주소 vs 포인터가 가리키는 주소

작성

·

309

·

수정됨

1

#include <iostream>

using namespace std;

int main()
{
	int array[5] = { 1, 2, 3, 4, 5 };

	int *ptr = array;  // ptr 자체의 주소는 다름, 그러나 array의 첫번째 요소를 가리킴!

	cout << "ptr: " << ptr << endl;  // 포인터가 가리키는 주소 == array 첫번째 요소 주소
	cout << "&ptr: " << &ptr << endl;  // ptr 자체의 주소 (array랑 다름)
	cout << "array: " << array << endl;

	cout << "sizeof(ptr): " << sizeof(ptr) << endl; // pointer 자체의 사이즈
	cout << "sizeof(ptr): " << sizeof(&ptr) << endl; // 마찬가지

	return 0;

}

 

제 질문은

ptr을 출력했을때는 포인터가 가리키는 주소, 즉 array의 주소를 반환하면서,

왜 sizeof(ptr)에서는 &ptr을 하지 않았는데도 pointer 자체의 주소에 대한 size를 반환하나요?? 앞선 논리처럼 array 첫번째 요소,[0]에 대한 size를 반환해야하는 것 아닌가요?

  

감사합니다.

답변 1

3

안녕하세요, 답변 도우미 Soobak 입니다.

sizeof() 연산자는 인자의 자료형 크기를 반환합니다.

질문해주신 코드에서 ptr 의 자료형은 int* 입니다.
따라서, sizeof(ptr)int* 자료형의 크기를 반환합니다.
반면, sizeof(&ptr) 에서 &ptr 은 포인터 변수 ptr 의 주소이므로, &ptr 의 자료형인 int** 의 크기가 반환됩니다.

만약, sizeof(array[0]) 이나 sizeof(*ptr) 과 같이 사용해보시면, 기대하시는 것처럼 배열의 첫 번째 요소인 int 자료형의 크기 4 바이트 결과를 얻으실 수 있습니다.

의지님의 프로필 이미지
의지
질문자

감사합니다.

의지님의 프로필 이미지
의지

작성한 질문수

질문하기