일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 함수
- Class
- C++
- libft
- jupyter 단축키
- python
- 42cursus
- for
- cout
- 42Seoul
- Double
- C언어
- 42서울
- 자료형
- phpmyadmin
- iF
- else if
- vs코드 단축키
- 42
- 포인터
- While
- ft_server
- float
- list
- 동적할당
- docker
- 2차원배열
- nginx
- 패킹
- 구조체
- Today
- Total
Developer
8.(C언어) 상수 본문
상수는 변하지 않는 값을 뜻한다.
상수에는 2가지 종류가 있는데 리터럴(literal) 상수와 심볼릭(symbolic) 상수 이다. 리터럴 상수는 1, 3, 'A' 와 같은 이름이 없는 상수를 말하고 심볼릭 상수는 이름이 있는 상수를 말한다.
int num = 8; 을 예로 들면 num 은 변수이고, 8은 리터럴 상수인 것이다. 그렇다면 심볼릭 상수는 무엇일까? 상수는 변하지 않는 값인데 이름이 존재하다니.. C언어 에서는 이름 const 키워드를 통해 심볼릭 상수를 만들 수 있다.
const int num = 8; 위에 선언한 변수와 차이점은 앞에 const라는 키워드가 붙은것인데 이는 num을 상수로 선언한다는 뜻이다. 하지만 보통 변수 선언과 다르게 주의할 점이 있는데 상수는 선언과 동시에 초기화를 해주어야 한다. 초기화는 앞에서 알아보았지만 선언과 동시에 값을 할당하는 것을 말한다. 쉽게말하면 리터럴 상수를 앞으로 쓰기위해 이름을 정해준다고 생각해주면 된다.
#include<stdio.h>
int main(){
int num1=8; //num1이라는 int형 변수에 리터럴 상수 8을 할당
const int num2=8; //num2라는 상수를 선언해 8을 할당
printf("%d\n",8); //정수 리터럴 상수 10 출력
printf("%f\n",0.8f); //실수 리터럴 상수 0.8출력
printf("%c\n",'A'); //문자 리터럴 상수 A 출력
printf("%d %d \n",num1,num2); //변수 num1과 상수 num2 출력
num1=2; //문제 없음
//num2=2; error 발생 상수는 변하지 않는 값이므로 상수로 선언된 num2는 변경될 수 없기때문에
return 0;
}
코드1을 살펴보자. return 0; 바로 위에 주석 처리된 num2=2;는 주석을 제거하면 error가 발생한다. num2는 상수라서 최초 선언 시 초기화된 값에서 변경될 수 없는 값이다. 따라서 num2에 다른 값을 대입하려고 하면 error가 발생하게 되는 것이다.
또 2번째 printf함수를 살펴보면 실수 리터럴 상수 뒤에 f를 붙여준 것을 볼 수 있다. 변수의 경우 선언할 때 자료형으로 해당 변수의 크기를 알 수 있지만 상수의 경우 그럴 수 없기 때문에 리터럴 상수 뒤에 접미사를 사용해 크기를 명확하게 표기해준 것이다.
자료형 |
접미사 |
int |
없음 |
unsigned int |
u , U |
long long |
ll, LL |
unsigned long long |
ull, ULL |
float |
f, F |
double |
없음 |
그냥 10은 int형 10을 말하며 10U는 unsigned int형 10을 말한다.
'Programming Language > C' 카테고리의 다른 글
10.(C언어) 연산, 연산자 (0) | 2020.08.01 |
---|---|
9.(C언어) scanf, 입력받기 (0) | 2020.08.01 |
7.(C언어) 실수 자료형의 표현 방법_부동소수점 (0) | 2020.08.01 |
6.(C언어) 진법, 음수표현 (0) | 2020.08.01 |
5.(C언어) 자료형_문자 (0) | 2020.08.01 |