변수
- 데이터(data)를 저장하기 위해 프로그램에 의해 "이름을 할당받은 메모리 공간"
- 이 공간에 저장된 값은 변경이 가능
- 정수형, 실수형, 사용자 정의형, 다양한 형태가 존재
- 변수의 이름 생성에는 규칙이 존재
- '선언'과 '할당'의 과정을 거친 변수는 주소를 받아 메모리 구조상 저장됨
int x (선언) = 5 (할당); " = 메모리 주소 ???에 int 자료형 5의 값을 저장해라
* 비고 *
- 0이 아닌 초기화가 되어있으면, 즉 할당 되어 있다면 .data 영역
- 초기값이 0 이거나 초기값이 없으면, 즉 할당 되지 않으면 .bss 영역
지역 변수, 전역 변수, 동적 변수
- 지역 변수 (Local Variable)
- 함수, 블록 안에서 선언, 사용 되는 변수, 외부에서는 사용 불가
- 함수, 블록의 종료와 함께 메모리상에서 소멸
- 초기값이 없으면 쓰레기값이 저장
- 스택 영역에 저장
- 전역 변수 (Global variable)
- 함수 블록 밖에서 선언, 전체 함수에 영향
- 프로그램이 종료될 때 메모리에서 소멸
- 초기값이 없으면 0으로 저장
- 데이터 영역에 저장
- 동적 변수
- 메모리 동적할당으로 생성되는 변수
- RunTime에 메모리를 할당
- 포인터를 사용
- 힙 영역에 저장
L-Value 와 R-Value
- C 표준 으로 대입 연산자(=)의 왼쪽을 L-Value, 오른쪽을 R-Value
- C++ 에서는 모든 표현식은 Lvalue, Rvalue
- L-Value : 메모리상에서 지속적인 주소(위치)를 가진 값
-> 단일 표현식 이후 없어지지 않고 지속되는 객체
-> const 타입을 포함한 변수들은 주소를 가지고 있으니 모두 L-Vlaue
- R-Value : 표현식이 종료된 이후 더이상 존재하지 않는 임시적인 값
-> 지속적인 메모리 주소와 관련이 없는 값
-> x에 3이 있을때, 5 와 x + 2는 같은 값으로 평가됨
** 비고
- (++x), (x++) 의 차이
=> ++x는 증가된 x 자신을 리턴하기 때문에 Lvalue
=> x++은 증가된 복사본을 리턴하기 때문에 Rvalue