Lined Notebook

[C++]값, 포인터, 참조 확실한 정리, value vs reference vs pointer

by cuore J

1. 용어 정리

object(객체) : 어떤 데이터가 메모리 안에 존재하고 있을때, 즉 메모리 안에 자리를 잡고 있으면, 그것이 object

L-value(object locator value)
: "메모리를 차지" 하고 있는 특정 데이터 객체
: 표현식(expression) 이후에도 없어지지 않고 지속되는 객체
ex.1) int x = 3; 의 x는 L-value
ex.2) ++x 는 "증가 후, 자기자신을 리턴" 하므로 L-value

R-value(value of an expression)
: 수정가능한 L-value에게 대입될 수는 있지만 자기 자신은 L-value가 될 수가 없음
: 표현식(expression)이 끝난 이후에는 더이상 존재하지 않는 임시적인 값
ex.1) 상수
ex.2) x++는 "자기자신을 증가시킨 복사본을 리턴" 하므로 R-value

2. 값, 포인터, 참조의 가장 쉬운 설명

int variable = 10;
int* pointer = &variable;
int& ref_variable = variable;

int& ref_variable = *pointer;
int* (&ref_pointer) = pointer;

변수 variable 주소가 0x20, 포인터 pointer의 주소가 0x40이라고 가정하자. 이제, 위의 코드를 아래와 같이 그릴 수 있다. 

int variable = 10; 의 의미를 명확하게 여러가지로 적어보자.
1. R-value인 10을 "복사" 하여 variable에 이동한다 가 아닌 저장한다.
2. "자료형" 이 정수(int)"변수" variable"값" 10 을 저장한다.
3. "변수" variable 이란 L-value에 "자료형" 이 정수(int)인 "값" 10을 저장한다.

포인터 란 *pointer 가 아닌 pointer 이다.(일부러 변수명을 p 가 아닌 pointer라고 하였다.) * 기호를 앞에 int에 붙인 이후, 위와 같이 "자료형", "변수", "값"으로 나누어 생각해 보자.
int* pointer = variable;
1. "자료형" 이 정수의 주소(int*)"변수" pointer"주소값" ;variable 을 저장한다.
2. "변수" pointer 이 "자료형" 이 정수의 주소(int*)"주소값" &variable 을 저장한다.

<참조> 란  대상이되는 "값" 에 별명을 매기는 것이다. 이것을 "참조한다/가르킨다" 라고 표현한다.
int ref_variable = variable;
1. "자료형" 이 정수의 별명(int&)"변수" ref_variable"별명의대상" variable 을 참조한다/가리킨다.
2. "변수" ref_variable"자료형" 이 정수의 별명(int&) "별명의대상" variable을 참조한다/가리킨다. 

그렇다면 * 와 & 가 "자료형"에 있을 때와 "값" 에 있을 때를 다음과 같이 구별할 수 있다.

 

블로그의 정보

cuore J

cuore J

활동하기