Coding/C & C++

C/C++ 변수와 상수, 데이터 표현

heyoon2j 2020. 1. 3. 21:50

 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