• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

23.09.27 21:39 작성 23.09.27 22:13 수정 조회수 182

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

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.09.28

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

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

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

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

의지님의 프로필

의지

질문자

2023.10.02

감사합니다.