왕 허접 질문... 배열의 포인터가 이해 안가요...

jspking의 이미지

#include

int main()
{
int test[10];
printf("0x%x\n",test);
printf("0x%x\n",&test);
}

실행 결과가 아래와 같은데.... 왜 이런가요?????

분명 & 붙이면 주소가 나와야 할 것 같은데요..

$ ./a.exe
0x22cc80
0x22cc80

김일영의 이미지

printf("0x%x\n",test); --> 배열명은 배열 첫 원소의 포인터
printf("0x%x\n",&test); --> &배열명은 배열 전체에 대한 포인터

둘의 값은 같을거고요. 차이를 보시려면 포인터 연산을 해 보시면 아실 겁니다.

그리고 0x%x 대신 가급적 %p 를 쓰시길...

coremaker의 이미지

밑에것이 배열이라고 칩시다..

a[5] => [0][1][2][3][4][5]

배열 a의 전체주소는 과연 어디일까요..?
아시다시피 a[0]의 주소를 가리키고 있습니다...
상식적으로 제일 앞이 대장입니다... 대장 주소를 알면 다른 쫄따구 위치도 아는겁니다...
그걸 언어적으로 표현하면..

&a[0]이 되죠.. &가 해당 변수의 주소를 가리키는 말이니까요...

근데 다른 표현도 있다는겁니다..
이건 규칙인데.. 배열이 a[n]으로 선언되었다면..
그냥 a만 써도... 배열의 첫번째 주소 즉 그 배열의 주소를 가리키게 되는 것입니다..
a[n] 배열의 이름이 a 이거든요.. 대장의 이름을 호명하면
당연히 주소를 말하는 것이라고 알아라.. 라고.. 규칙이 정해져 있습니다..