• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

arr[0]=&arr[0]의 주소가 왜 같은지 질문드립니다!

21.07.13 15:17 작성 조회수 420

0

안녕하세요 선생님 강의 듣다가 잘 이해가 안가서 질문을 드립니다.
강의도중 이런 예시가 나왔습니다.
int arr[2][3] = { {1,2,3},{4,5,6} }; printf("%p %p %p", arr, arr[0], &arr[0]); arr[0]=&arr[0]
여기서 앞에 arr과 arr[0]의 주소가 같은거는 잘 이해가 되지만 이것들과 뒤에 &arr[0]의 주소가 같은 이유를 잘 모르겠습니다.
강의도중 그 이유를 말씀해주셨지만 그것만으로는 잘 이해가 가지 않아서 질문드립니다.
제가 생각하기에는 배열은 포인터의 역할을 수행하니깐 arr과 &arr[0]은 이중포인터가 되는거 아닌가요?
즉 arr[0]의 값이 들어있는 주소가 아닌 arr[0]의 주소를 담고있는 포인터의 주소라고 생각이듭니다

답변 1

답변을 작성해보세요.

1

안소님의 프로필

안소

2021.07.13

안녕하세요. 질문의 출처가 되는 연관 강의를 꼭 기재해주실 것을 부탁드립니다. :)

연관 강의를 적어주지 않으셔서 질문자님께서 어디까지 강의를 들으셨는지 모르겠지만..! 배열의 이름에 & 가 붙어도 "배열의 이름의 주소"가 되는 것이 아닌!! 값은 배열 이름과 그대로 동일합니다. 강의에서 배열 이름에 & 붙여도 그대로 배열 이름 값이라고 배우셨을거에요. 혹은 앞으로 배우시거나요..!

arr 가 배열 이름이라면 arr 와 &arr 은 값이 같습니다. 배열의 이름의 주소는 그냥 배열의 이름값일 뿐입니다. 포인터의 포인터, 즉 이중 포인터로 처리 되지 않아요. 배열의 이름은 포인터처럼 값을 맘대로 바꿀 수 있는 그런 "변수"가 아니기 때문입니다. 이러한 특수성때문에 이런 현상이 발생하는 것이라고 생각해주시면 될 것 같아요 :)  우리가 int a = 3; 으로 한다면 이 3 이라는 값의 주소는 개발자가 알 수가 없죠? 변수도 아닐뿐더러 접근도 불가능합니다. 배열 이름도 그러한 맥락이라고 생각해주시면 됩니다.  

(arr[0] 은 {1,2,3} 배열의 이름이나 마찬가지라고 보시면 됩니다. 그러니 arr[0] = &arr[0] 인거에요!)