-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
포인터 자체의 주소 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를 반환해야하는 것 아닌가요?
감사합니다.
답변을 작성해보세요.
2
Soobak
2023.09.28
안녕하세요, 답변 도우미 Soobak 입니다.
sizeof()
연산자는 인자의 자료형 크기를 반환합니다.
질문해주신 코드에서 ptr
의 자료형은 int*
입니다.
따라서, sizeof(ptr)
은 int*
자료형의 크기를 반환합니다.
반면, sizeof(&ptr)
에서 &ptr
은 포인터 변수 ptr
의 주소이므로, &ptr
의 자료형인 int**
의 크기가 반환됩니다.
만약, sizeof(array[0])
이나 sizeof(*ptr)
과 같이 사용해보시면, 기대하시는 것처럼 배열의 첫 번째 요소인 int
자료형의 크기 4
바이트 결과를 얻으실 수 있습니다.
답변 1