[C언어] 상수와 변수의 이해
상수 (constant) 란 ?
항상 같은 수, 즉 프로그램 시작부터 끝까지 변하지 않는 값을 의미한다.
변수(variable)란 ?
상수 값을 기억시키고 값을 변경하기 위해 메모리상(RAM)의 임의의 위치에 필요 크기만큼 할당된 기억공간을 의미한다. 변수는 하나의 데이터 값을 가질 수 있으며 한번 정해진 값이 고정되는 것이 아닌 계속 바뀔 수 있는 수이다.
또한 담기는 데이터에 따라서 변수의 자료형(Data type)이 결정된다. c언어에서의 모든 변수는 반드시 블록의 선두에서 미리 선언되어야한다.
즉, 상자를 변수 안에 들어가는 내용물을 상수라고 이해하면 쉽다.
C언어의 기본 자료형 ( Data Type )
C는 char, int, float, double등 기본 데이터 형이 있고 몇개의 한정자(qualifier)을 이용해 확장이 가능하다.
각각의 데이터 표현방식이 다르고 효율적인 메모리 공간 활용을 하기 위해 효율적인 자료형을 선택하는 것이 중요하다.

또 부호가 있느냐 없느냐에 따라서 부호가 있는 변수 (signed)와 부호가 없는 변수 (unsigned)로 나뉘게 된다.

만약 int 자료형을 사용하여 정수 데이터를 변수에 담으려 한다면 변수만이 가지고 있는 고유한 특징이 있어야한다.
따라서 모든 변수는 변수명 (=식별자)를 지닌다. 변수의 이름은 사용자가 정의하여 사용한다.
식별자 작성 규칙
- 영문자, 밑줄 (_), 숫자 문자를 사용하며 첫 글자는 반드시 영문자나 밑줄이 와야한다
- 대소문자를 구별한다 (num, Num, NUM은 모두 다르게 취급)
- 예약어 및 main() 함수명은 식별자명으로 강요할 수 없다 (void, int, if)
- 특수문자와 공백은 사용할 수 없다.
- 한 영역내의 식별자명은 유일해야 한다
✔ 즉, 한 블록 내에 동일한 이름의 변수명이나 함수명을 선언하여 사용할 수 없다.
int main()
{ int a;
double b;
char a;
return 0;
}
위와 같은 코드는 int와 char의 변수가 한 블록 내에 동일하므로 에러가 뜬다. 그러나 만약 다른 블록에서의 동일 변수명은 상관 없다.
✔ 전달인자와 블록 안에 동일한 변수가 선언이 되었을때도 에러가 난다. 전달인자는 실제 변수를 선언한 것이기 때문에 똑같은 변수를 사용한 것으로 인식하기 때문이다. 즉, 전달인자도 블록 안에서 선언된 변수라고 이해해야한다.
6. 변수 설정 시 만약 단어 두개가 합성되면 taxRate와 같이 두번째의 단어 (단어가 바뀔때마다) 처음은 대문자로 써서 명확하게 구분되어 보이게끔 한다.
7. 컴파일러와 리소스는 두 개의 밑줄 문자로 시작하는 변수명이나, 밑줄 문자와 대문자로 시작하는 변수명을 사용하므로 이런 식별자의 사용은 피한다.
C언어의 5대 상수
1. 숫자상수 : 정수형상수와 실수형 상수가 있다.
1) 정수형 상수 : 10진수, 8진수, 16진수 사용
2) 실수형 상수 : 10진수만 사용
ex) 12.5 0.12325E2 ...
✔ 0.12325E2 = 0.12325 * 10 **2 = 12.325 ( 지수형 표기)
✔ 지수형 표기는 일반적으로 너무 큰 숫자나 작은 숫자를 나타낼 때 사용 ( exponent )
2.문자상수 : 단일인용부호를 이용해서 표현하며 메모리에 1 byte 크기로 할당
ex) '3' , 'A' , '\n' (실질적으로는 하나의 기능이기 때문에 단일인용부호) , ' '
👀 3하고 '3' 은 엄연히 다르다
char a = 3; // a 안에 3 입력
char b = '3';// b안에 51 (아스키) 입력
3. 문자열 상수: 이중인용부호를 이용해서 표현하며 문자열의 끝 표시인 '\0' (null 문자)로 종료하는 데이터
여기서 중요한 점은 만약 abc라는 상수가 있다해도 널 값까지 포함한 4byte인 것이다.
✔ null string: ""있는 문자 / 즉 null 문자만 있는 것
👀 char c= "3" ; 이라고 하면 에러가 뜬다. 왜냐하면 1byte에 글자 하나씩 들어가는데 문자열 상수는 3과 널 값을 포함한 2byte를 필요로 하기 때문이다. 이러한 경우엔 복합형 데이터인 배열을 활용해 char c[2] = "3" ; 이라고 하면 두개의 방, 2byte를 만들 수 있다.
4.심볼릭 (symbolic) 상수 :
매크로 상수 (전처리기에 의해 처리되는 #define 명령문에 의해 지정되는 상수로서 매크로 상수는 치환할 문자열로 치환되어 컴파일 된다) , 열거형 상수, const 상수
즉 이름을 지닌 함수라고 이해하면 쉽다.
5. 주소 상수: 변수의 시작주소, 배열의 시작주소, 배열원소 (각방) 의 시작주소, 함수의 시작주소
상수의 분류
크기에 따른 분류
1) 고정 길이 상수
1. 숫자 상수
- 정수형 상수 (1, 21억 등 // 무조건 4byte 크기)
- 실수형 상수 (무조건 8byte)
2. 문자 상수 : 1 byte 크기
3. 주소 상수 : 프로젝트 설정에 따라 2 or 4 or 8 byte 크기
2) 가변 길이 상수 (문자열 상수만 가변길이 상수)
1. 문자열 상수 : 길이가 다 제각각이므로 끝을 나타내주는 문자 기호 null을 사용
ex) "abc" → 0을 포함한 4byte 필요
✔ 널 문자도 한 바이트를 차지한다.
차원에 따른 분류
1) 일반상수
- 숫자상수, 문자상수, 매크로상수 일부 (#define PI 3,14)
- 무조건 0차원
2) 주소상수
- 문자열상수, 주소상수, 매크로상수 일부
- 적어도 1차원 이상
변수의 분류
차원에 따른 분류
1) 일반변수 (값 저장)
- 일반상수 저장
- 0차원
2) 포인터변수 (주소 저장)
- 주소상수 저장
- 적어도 1차원 이상
→ 주소가 있는 곳을 가르킴
출처 :
제대로 배우는 정혜경 C언어 입문 강의
[C언어] 문자와 문자열 상수 표현법 (%c, %s)
C언어 문자와 문자열 상수 표현법 (%c, %s) 문자는 작은따옴표로 묶고 문자열은 큰따옴표로 묶습니다. 문자 : 'A' 문자열 : "Hello, world!" #include int main(void) { printf("%c\n", 'A'); printf("%s\n", "Hello, world!"); pr
aeapa.tistory.com
https://hellmath.tistory.com/28
C언어 공부하기 - 변수와 상수
변수와 상수는 프로그램에서 사용되는 기본적인 데이터입니다. 변수와 상수를 사용하기 위해서는 사용할 변수를 형식에 맞게 선언을 하고 값을 지정해 줄 필요도 있습니다. 변수와 상수는 데이
hellmath.tistory.com