작성
·
254
0
강의 16:40 쯤,
L-value 는 Object다 라고 하신 부분에 관해 질문 드립니다.
Q1. Object는 메모리 공간 자체고,
L-value는 그 공간을 참조하는 expression이나, identifier라고 하신 설명과는 다른 것 같아서 질문 드립니다!
Q2. 또, arr[0] 이 object라고 하신 부분도,
arr[0] 이 어떠한 메모리 공간에 접근 가능하게 한다는 것은 알겠는데
위 질문과 같은 맥락으로 혼란이 있습니다. !
object가 메모리 공간 그 자체를 의미하는거라면 script 상에는 아예 존재하지 않는 것이 아닌가... 하는 질문입니다!
Q3. arr == &arr[0]이 메모리 주소값임에도 Object를 의미히지 않는 이유는
"메모리 주소값" != "메모리 공간" 으로 받아들이면 될까요???
답변 2
2
1. L-value 는 공간이라고도 말할 수 있겠고 expression이나, identifier 라고도 말할 수 있겠습니다. 예를 들어 int a = 2; 라는 식이 있다면 2 라는 데이터를 a 라는 공간에 집어 넣을 수 있겠죠. 그리고 우리는 a 라는 이름으로 그 공간을 참조할 수도 있고 a라는 이름을 바탕으로 이 공간과 다른 공간을 구분할 수도 있죠. 그래서 a 는 L-value 가 됩니다. 이런식으로 생각해주시면 될 것 같아요.
2. 혹시 오브젝트를 메모리 공간이라고 말씀하신 부분이 어디쯤인지 알 수 있을까요? "공간" 그 자체를 오브젝트라고 하기보단 "공간을 자리잡고 있는, 메모리를 차지하고 있는, 실제로 존재하고 있는 어떤 것"을 오브젝트라고 표현하는 것이 더 자연스러울 것 같다고 저는 이렇게 이해하고 있어서요..! 아마 교수님께서도 제가 이해하고 있는 뜻으로 오브젝트가 공간이라고 말씀하신 것 같아요. 그리고 이 질문은 제가 이해하기가 조금 어렵네요 ㅠㅠ
3. 말그대로 집을 집주소와 같다고 말하지는 않듯이 주소는 그저 어떤 공간을 참조하는 이름일 뿐입니다. 근데 int* ptr 이런 포인터 변수(여담으로 포인터 변수도 L-value가 되겠네요. 데이터를 저장하는 공간이니까요)에다가 어떤 주소값을 저장중이라면 이떈 그 주소값 데이터를 오브젝트라고 표현할 수 있을 것 같아요.
arr 그 자체는 지난 답변에서도 말씀드렸듯이 첫번째 원소의 주소. 그 자체를 가리키며 뭔가 메모리를 차지하고 실존하고 있는 그 무언가는 아닙니다. 그래서 시스템상 &arr 는 그냥 arr 그 자체의 주소가 아닌 첫번째 원소의 주소 값을 나타냈었죠.
0
Q2에 관해서 다시 말씀드리자면
음... 제가 강의를 보며 이해하기로는
말씀 하신대로 메모리 공간을 차지하는 어떤 것 = 오브젝트
expression, identifier등은 그 오브젝트의 이름표 ? 라는 느낌이었습니다!
그래서 arr[0]은 expression이고,
arr[0]의 값이 object인 것으로 이해했구요!
그래서 강의중 arr[0] 이 object다 ! 라고 하신 것에서 혼동이 있었습니다 !!
L-value가 object다 라는 표현도 마찬가지구요 ㅠㅠ