■ C/C++ 변수와 상수
ㆍ 변수와 상수
- 변수 및 상수 = 값을 저장할 수 있는 메모리 공간
1. 변수
- 변수(Variable)는 변할 수 있는 데이터
- 변수를 선언할 때는 자료형과 변수명을 입력한다. 원하는 경우 초기값을 적용할 수 있다.
- 초기화되지 않은 변수는 쓰레기 값이 들어간다.
ex>
int a;
int b = 7;
* 변수 이름 선언 시 적용되는 규칙
1) 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.
2) C언어는 대소문자를 구분한다.
3) 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없다.
4) 이름 사이에 공백이 삽입될 수 없다.
① 지역 변수
- 중괄호 내에 선언되는 변수는 모두 지역 변수이다.
- '스택(Stack)'이라는 메모리 영역에 할당되며, 해당 함수 안에서 할당과 소멸이 된다.
- 선언된 함수 내에서만 접근이 가능하다.
② 전역 변수
- 처음 실행되면 메모리 공간에 할당되어서 프로그램이 종료될 때까지 메모리 공간에 남아있는 변수이다.
- 어디서든 접근이 가능한 변수
- 별도의 값으로 초기화하지 않으면 0으로 초기화된다.
* 지역 변수와 이름이 같을 시, 지역변수에 가려진다
③ static 변수
- 전역 변수와 마찬가지로 시작과 동시에 할당되어 프로그램이 종료될 때까지 남아있다.
=> 전역 변수로 선언하지 않고, static을 사용하는 이유는 접근 범위를 지역변수는 해당 함수로, 전역변수는 해당 파일로, 멤버변수는 클래스로 제한하기 위해서
* static 멤버변수의 경우, 클래스를 위해 메모리 공간에 딱 하나만 할당되고, 실질적으로 클래스 외부에 있다. 그렇기 때문에 초기화도 클래스 외부에서 해야 되고, Public인 경우 외부에서 클래스 이름 만으로 호출할 수 있다.
ex> int SoSimple::number =0;
2. 상수
- 상수(Constant)는 변하지 않는 데이터
① 리터럴(Literal) 상수
- 변수와 달리 이름이 없는 상수를 가리켜 '리터럴 상수' 또는 '리터럴'이라고 한다.
ex>
int num = 30 + 40;
=> num에 70이란 값이 저장되기 위해서는 다음과 같다.
=> 먼저 정수 30, 40이 메모리 공간에 상수의 형태로 저장되고, 두 상수를 기반으로 덧셈이 진행, 결과가 num에 저장
* 문자형 리터럴 같은 경우, 컴파일러에 의해 정수로 변하기 때문에 4 Byte로 표현된다( 'A', 'Z' 등 )
② 심볼릭(Symbolic) 상수: const 상수 & 매크로
- 심볼릭 상수는 변수와 마찬가지로 이름을 지니는 상수이다.
* 상수의 이름은 모두 대문자로 표시, 둘 이상의 단어로 연결할 대는 MY_AGE와 같이 언더바를 이용해서 단어를 구분하는 것이 관례이다.
□ const 상수
- 변수 선언 시 const 선언만 추가하면 된다. 단, 상수이기 때문에 선언과 동시에 초기화를 해야 한다.
ex>
const int MAX = 100;
* const 포인터
const int *ptr1 = &val1; // ptr1을 이용해서 val1의 값을 변경할 수 없다
int * const ptr2 = &val2; // ptr2가 상수화 된다
const int* const ptr3 = &val3;
□ 매크로
- #define '지시자'를 사용하여 선언
ex>
#define PI 3.1415
ㆍ 데이터 표현
- 컴퓨터는 2진수를 기반으로 데이터를 표현하고 연산도 진행한다.
* 2진수로 표현하게 되는 경우, 길이가 길어지기 때문에 보통 16진수로 표현하기도 한다.
- 비트(Bit)와 바이트(Byte) 단위를 사용한다.
=> 표현은 다음과 같다.
1 Byte = 8 Bit
4 Byte = 32 Bit (보통 컴퓨터 연산은 32 Bit로 계산되기 때문에, 4 Byte인 Integer 형으로 계산하는 것이 빠르다. 문자형의 경우는 연산이 필요 없으므로 굳이 4Byte를 사용할 필요가 없다)
1 Bit = 2 진수 값 저장
4 Bit = 16 진수
'Coding > C & C++' 카테고리의 다른 글
C/C++ 구조체(struct, class) (0) | 2020.02.18 |
---|---|
C/C++ 함수 오버로딩 vs 함수 오버라이딩 (0) | 2020.01.31 |
C/C++ 배열과 포인터 (0) | 2020.01.11 |
C/C++ 입출력 (0) | 2020.01.04 |
C/C++ 개발 환경 구축 (0) | 2020.01.02 |