728x90
반응형

c 언어에서는 l-value 와 r-value 두가지의 문법적인 요소가 존재함.

 

l-value(left-value, Locator- value)

: object의 위치값이라는 의미가 됨.

l-value는 object를 표기할 수 있는 것을 말함. (void타입의 object 제외)

 

int a = 10;

 

a라는 것은 10이라는 값이 들어있는 메모리 공간인 object를 의미.

식별자 a라는 것이 10이 들어있는 object를 표기하기 위해 사용된다는 것을 의미.

 

int*p = &a;

*p 포인터 변수 p 또한 10이라는 값이 들어있는 object를 표기할 수 있음.

따라서 *p또한 l-value로 표현할 수 있음.

p[0]도 *p 와 동일하므로 같은 이유로 l-value임.

 

p[10] 또한 lvalue 이지만 p+10은 object를 가리키고 있지 않을 수 있음.

존재하지 않는 object를 표기하는 것이니 *(p+10) 또한 lvalue

그리고 이러한 lavalue를 사용하는 것은 미정의 동작(undefined behavior)

 

r-value(right-value, value fo an expression)

식을 계산한 후의 값이라는 의미가 됨

 

예를 들면 1 + 2 라는 식을 계산한 결과값은 rvalue

1 + 2를 게산한 결과값인 3이 메모리의 어디에 위치하는지 c언어에서는 알 방도가 없음.

분명 1+2의 계산 후 결과값이 메모리 어디엔가 들어있게 될것

즉, 1 + 2를 계산한 후의 결과값인 3을 저장하고 있는 object는 어디엔가 존재할 것임.

하지만, rvalue는 object 안에 들어있는 값만을 의미하기 때문에 rvalue로는 object 안에 들어있는 값에

대한 것을 제외하고는 object 에 대한 정보를 알 수가 없음.

 

c언어로 프로그래밍을 하는 한 1 + 2 의 결과물이 메모리의 어디에 위치하게 될지 계산하는

프로그램을 만들 수 없다는 의미임.

 

int a = 5;

 

상수 5 자체도 rvalue, 5라는 상수가 어디에 위치하는지 c언어에서는 모름

분명 5라는 상수도 메모리 어디엔가 위치하고 있음. 즉 상수 5에 대한 object는 존재함.

하지만 rvalue는 object가 아닌 object안에 저장되어있는 값만을 의미함.

 

이렇게 lvalue는 값이 들어있는 공간의 위치값을 가지고 있는 반면,

rvalue는 값이 들어있는 공간의 위치값을 가지고 있지 않음.

---

 

그런데 모든 lvalue가 대입연산자의 왼쪽에 올 수 있는 것은 아님.

c89 표준부터 const 키워드가 나오고, modifiable lvalue 규칙이 추가됨.

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=han95173&logNo=220765490854 

 

C언어 "lvalue와 rvalue"

C언어에는 lvalue와 rvalue 두가지 값이 존재합니다. 모든 존재하는 값은 lvalue 와 rvalue 로써 존재합니...

blog.naver.com

 

728x90
반응형

'Language > C & C++' 카테고리의 다른 글

Exception handling  (0) 2022.10.14
Implement reference-based call-by-reference  (0) 2022.09.28
Class  (0) 2022.09.26
BankingSystemver01.cpp  (0) 2022.09.26
C++  (0) 2022.09.24

+ Recent posts