변수는 변할 수 있는 값을 의미한다.
변수는 저장하는 값에 다라 정수형, 실수형, 문자형, 포인터형 등으로 구분된다.
변수명을 작성할 때에는 몇가지 규칙이 따른다.
예약어는 아래와 같다.
제어문 : do, for, while, case, if, else, switch, return 등
자료형 : char, int, double, short, long 등
기타 : sizeof, const 등
...
변수 선언 시 메모리 내에 변수 값을 저장하기 위한 기억영역이 할당된다. 할당되는 기억영역에 따라 사용 범위에 제한이 있으며, 이러한 기억영역을 결정하는 작업을 기억 클래스라고 한다.
C언어에서의 기억 클래스는 아래와 같다.
: 함수나 코드의 범위 내에서 선언되는 변수를 의미한다.
함수나 블록이 실행되는 동안에만 존재하며, 이를 벗어나게 되면 자동으로 소멸된다.
초기화하지 않으면 쓰레기값이 저장된다.
: 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조하기 위한 변수를 의미한다.
함수 밖에서 선언하며, 함수가 종료된 뒤에도 값이 소멸되지 않는다.
초기화하지 않으면 자동으로 0으로 초기화되며, 다른 파일에서 선언된 변수를 참조할 경우 초기화 할 수 없다.
: 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 정적 변수가 있으며, 내부 정적 변수는 선언한 함수나 블록내에서만 사용할 수 있는 특징을 가지고 있다. 외부 정적 변수는 모든 함수에서 사용할 수 있는 특징을 가지고 있다.
초기화는 변수 선언 시 한 번만 할 수 있으며, 초기화를 생략하면 자동으로 0으로 초기화된다.
: 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수를 의미한다.
자주 사용되는 변수는 레지스터에 저장하여 처리속도를 높인다.
함수나 블록이 실행되는 동안에만 존재하며, 이를 벗어나면 자동으로 소멸된다.
레지스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 경우 자동으로 변수 취급되어 메모리에 할당된다.
CPU에 저장되어 메모리 주소를 가질 수 가 없기 대문에 변수의 주소를 구하는 주소 연산자를 사용할 수 없다.