8분 12초 10분 55초 질문 있습니당
8분 12초와 10분 55초에서
*pt와 arr[0] 둘 다 식별자는 아니지만 표현식을 통해서 메모리 공간에 접근하는 것인데
*pt는 오브젝트를 가리킨다고 표현하고
arr[0]은 오브젝트라고 표현하는게 이해가 잘 안되요
그러니까 arr[0]이 표현식이라는건 납득이 되는데 오브젝트라는건 납득이 안되요
변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼
표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?
실제로 *pt는 표현식이지만 메모리 공간에 접근한다고 해서 오브젝트라고 부르지 않잖아요
항상 좋은 답변 정말 감사합니다.
답변 1
3
안녕하세요, 질문&답변 도우미 Soobak 입니다.
두 가지 부분에서 혼동이 있으신 것 같습니다.
포인터의 참조 표현식과 배열에서의 원소 접근 표현식 에서의 용어 차이
변수의 이름(식별자)과 오브젝트가 구분되는 정확한 이유
*pt와arr[0]모두 메모리 공간에 접근하여 그 위치에 저장된 '값'을 참조합니다.
다만, 포인터 자료형인 pt 의 경우 *pt 표현식을 통해서 '오브젝트' 를 가리킨다고 표현합니다.
즉, 포인터의 역참조를 통해 간접적으로 메모리 위치를 참조하게 되며,
이러한 맥락과 과정에 대해서 "*pt designates an object." 로 , 'designate' 라는 용어를 사용하여 표현하게 됩니다. (용어의 사용에 대해서는 해당 강의 8:40 부분 교수님 설명처럼, 이러한 용어가 사용되는 구나 정도로 이해하고 추후에 복습해보시는 것을 추천드립니다.)
반면, arr[0] 표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.
따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.
질문 주신 내용 중,
변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼
표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?
: 변수 이름과 오브젝트가 구분되는 이유는 '변수 이름' 은 메모리 상의 특정 위치에 대한 '식별자'이고,
해당 위치의 값인 '오브젝트' 가 아니기 때문입니다.
만약, 표현식이 평가된 후 메모리에 저장된 데이터를 가리키는 경우, 그 데이터(표현식이 참조하는 메모리 위치에 저장된 값)는 오브젝트가 됩니다.
다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.
1
반면, arr[0] 표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.
따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.
여기서 arr[0]이라는 표현식은 object라고 표현할 수 있다고 하셨는데
다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.
여기서는 표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하시는 게 개념이 충돌되서 잘 이해가 안되네요
그러니까 arr[0]은 표현식이지만 오브젝트라고 표현할 수 있다고 하는 것과
표현식이 메모리에 저장된 데이터를 가리키는 경우 표현식 자체를 오브젝트라 부르는 게 아니라
표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하는게 혼동이 돼요
답변 정말 감사합니다.
1
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] 이 직접적으로 참조하고 있는 메모리 주소의 데이터 입니다.
Export template 안됨
1
26
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
56
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
79
2
c = TWO * (a+b); 에서 a와 b는?
1
59
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





