• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

8분 12초 10분 55초 질문 있습니당

24.03.15 21:42 작성 조회수 75

1

8분 12초와 10분 55초에서

*pt와 arr[0] 둘 다 식별자는 아니지만 표현식을 통해서 메모리 공간에 접근하는 것인데

*pt는 오브젝트를 가리킨다고 표현하고

arr[0]은 오브젝트라고 표현하는게 이해가 잘 안되요

그러니까 arr[0]이 표현식이라는건 납득이 되는데 오브젝트라는건 납득이 안되요

변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼

표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?

실제로 *pt는 표현식이지만 메모리 공간에 접근한다고 해서 오브젝트라고 부르지 않잖아요

 

항상 좋은 답변 정말 감사합니다.

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2024.03.16

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

두 가지 부분에서 혼동이 있으신 것 같습니다.

  • 포인터의 참조 표현식과 배열에서의 원소 접근 표현식 에서의 용어 차이

  • 변수의 이름(식별자)과 오브젝트가 구분되는 정확한 이유

     

     

    *ptarr[0] 모두 메모리 공간에 접근하여 그 위치에 저장된 '값'을 참조합니다.

다만, 포인터 자료형인 pt 의 경우 *pt 표현식을 통해서 '오브젝트' 를 가리킨다고 표현합니다.
즉, 포인터의 역참조를 통해 간접적으로 메모리 위치를 참조하게 되며,
이러한 맥락과 과정에 대해서 "*pt designates an object." 로 , 'designate' 라는 용어를 사용하여 표현하게 됩니다. (용어의 사용에 대해서는 해당 강의 8:40 부분 교수님 설명처럼, 이러한 용어가 사용되는 구나 정도로 이해하고 추후에 복습해보시는 것을 추천드립니다.)

반면, arr[0] 표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.
따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.

 

질문 주신 내용 중,

변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼

표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?

: 변수 이름과 오브젝트가 구분되는 이유는 '변수 이름' 은 메모리 상의 특정 위치에 대한 '식별자'이고,
해당 위치의 값인 '오브젝트' 가 아니기 때문입니다.

만약, 표현식이 평가된 후 메모리에 저장된 데이터를 가리키는 경우, 그 데이터(표현식이 참조하는 메모리 위치에 저장된 값)는 오브젝트가 됩니다.
다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.

반면, arr[0] 표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.
따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.

여기서 arr[0]이라는 표현식은 object라고 표현할 수 있다고 하셨는데

 

다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.

여기서는 표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하시는 게 개념이 충돌되서 잘 이해가 안되네요

 

그러니까 arr[0]은 표현식이지만 오브젝트라고 표현할 수 있다고 하는 것과
표현식이 메모리에 저장된 데이터를 가리키는 경우 표현식 자체를 오브젝트라 부르는 게 아니라
표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하는게 혼동이 돼요

 

답변 정말 감사합니다.

Soobak님의 프로필

Soobak

2024.03.16

arr[0] 를 Object 라고 표현하는 부분에서, Object 가 되는 대상은 arr[0] 이라는 표현식이 아니라, arr[0] 이라는 표현식의 결과, 즉, 메모리 상의 구체적인 값입니다.
즉, 이해하신 것처럼 식별자나 표현식이 아니라, '주소를 가지고 있는 메모리 상의 데이터' 가 오브젝트 입니다.

이 때, 용어의 사용에 있어서 간접적으로 메모리 주소를 참조하여 값을 표현하는 *pt 와, 직접적으로 메모리 주소를 참조하여 값을 표현하는 arr[0] 의 차이점을 혼동하고 계신 것 같아, *pt designates an object. 라는 주석 내용과 arr[0] is an object 주석 내용을 구분 지어서 표현식이 오브젝트를 표현하는 과정에 대한 언어 사용을 설명 드린 것입니다.

예를 들어, 주석 // arr[0] is an object 에서,
object 의 대상은 arr[0] 이라는 표현식이 아니라, arr[0] 표현식의 결과, 즉, arr[0] 이 직접적으로 참조하고 있는 메모리 주소의 데이터 입니다.