상수(Constant)란 프로그램 실행 도중 그 값을 변경할 수 없는 고정된 값을 의미합니다. 한 번 정해지면 프로그램이 끝날 때까지 항상 같은 값을 유지합니다.
C 언어에서는 숫자, 문자, 문자열 등이 모두 상수가 될 수 있으며, 어떤 데이터 타입이든 상수로 선언할 수 있습니다. 상수는 '리터럴(literal)'이라고도 부릅니다.
상수의 두 가지 유형
C 언어의 상수는 크게 두 가지로 나눌 수 있습니다.
1. 기본 상수(Primary Constants) – 정수형(Integer), 실수형(Float), 문자형(Character)처럼 가장 기본적인 데이터 타입으로 구성된 상수입니다.
2. 2차 상수(Secondary Constants) – 배열(Array), 구조체(Structure), 포인터(Pointer), 열거형(Enum) 등 파생된 자료구조를 활용한 상수입니다.
상수 선언 문법
C 언어에서는 const 키워드를 사용하여 변수를 상수로 만들 수 있습니다. const로 선언된 변수는 초기화 이후 값을 수정하려 하면 컴파일 오류가 발생합니다.
const 자료형 변수명 = 초기값;
기본 상수 예제
다음 예제는 삼각형의 넓이를 계산하는 프로그램입니다. 높이(height)와 밑변(base)을 const int로 선언하여 실행 중에 값이 바뀌지 않도록 했습니다.
#include<stdio.h>
int main(){
const int height=20;
const int base=40;
float area;
area=0.5 * height*base;
printf("삼각형의 넓이 :%f", area);
return 0;
}
실행 결과
삼각형의 넓이 :400.000000
2차 상수 예제
다음 예제는 포인터를 활용한 2차 상수의 개념을 보여줍니다. 포인터 변수 p에 일반 변수 a의 주소를 저장하고, 역참조(*p)를 통해 간접적으로 값을 변경하는 과정을 확인할 수 있습니다.
#include<stdio.h>
void main(){
int a;
int *p;
a=10;
p=&a;
printf("a=%d\n",a); // a의 값 출력
printf("p=%d\n",p); // p에 저장된 주소값 출력
*p=12;
printf("a=%d\n",a); // 포인터를 통해 변경된 a의 값
printf("p=%d\n",p); // p에 저장된 주소값은 변하지 않음
}
실행 결과
a=10 p=6422036 a=12 p=6422036
실행 결과에서 볼 수 있듯이, 포인터 p가 가리키는 메모리 주소의 값을 변경하자 원래 변수 a의 값도 함께 12로 바뀌었습니다. 반면 포인터 자체에 저장된 주소값은 그대로 유지되는 것을 확인할 수 있습니다.