int arr[5]; 일때 &arr은...

wans038의 이미지

안녕하세요.
너무 초보적인질문이긴 합니다만 열심히 공부중입니다.

#include <iostream>
using namespace std;
 
int main(int argc, char** argv)
{
int arr[5]; // 0x0001
int* pArr = arr;
 
cout << arr << ", " << &arr; // 똫같이 0x0001이 출력
}

배열의 이름은 배열의 시작 주소값 & 상수

그 배열의 이름을 가지고 &연산을 똫같은 주소값이 출력되는데...

int* test(void)
{
return &arr; // 에러... 
}

왜 에러가 날까요...어짜피 똫같은 주소값이 출력되는데 1차원 포인터형 아닌가요...?

익명 사용자의 이미지

주소는 같지만 타입이 다릅니다.

arr : 배열의 첫번째 원소를 가리키는 포인터 주소값. 여기서는 int * 형. &arr[0]과 동일
&arr : 배열 전체에 대한 포인터 주소값. 여기서는 int *[5] 형. (pointer to array of int[5])

포인터 또한 데이터형이고, 따라서 항상 그 타입이 뭔지 생각해야 합니다.

이렇게 생각하시면 되겠군요.
"10미터 앞에 있는 저거 가져와"라고 했을때 그게 과일 바구니인지 그 안에 담겨진 사과 하나인지는 아무도 모릅니다.