일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- iF
- 함수
- for
- Class
- C++
- 42cursus
- 패킹
- 2차원배열
- python
- 포인터
- C언어
- float
- vs코드 단축키
- libft
- else if
- jupyter 단축키
- phpmyadmin
- 동적할당
- Double
- cout
- While
- 구조체
- docker
- ft_server
- 42
- 42서울
- 42Seoul
- 자료형
- nginx
- list
- Today
- Total
Developer
2.(c언어) 자료형과 변수 그리고 출력 본문
다양한 값을 다루기 위해 변수가 필요하므로 변수에 대해서 알아보자.
C언어의 변수 선언은 아래와 같이 선언한다.
자료형 변수이름;
ex)int a; //정수형 변수 a를 선언한다.
자료형
우선 자료형에 대해서 알아보자
C언어에 있는 자료형의 종류는 아래의 표와 같다.(window)
자료형 |
크기 |
범위 |
char |
1byte |
-128 ~ 127 |
short |
2byte |
-32,768 ~ 32,767 |
int |
4byte |
-2,147,483,648 ~ 2,147,483,647 |
long |
4byte |
-2,147,483,648 ~ 2,147,483,647 |
long long |
8byte |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float |
4byte |
1.175494e-38 ~ 3.402823e+38 |
double |
8byte |
2.225074e-308 ~ 1.797693e+308 |
char, short, int, long, long long 은 정수 자료형, float, double 은 실수 자료형이다.
또한 위의 자료형들은 범위를 보면 알겠지만 모두 부호가 있는 자료형이다.
부호가 있는 자료형은 해당 자료형 앞에 signed라는 부호 키워드를 추가해 정의할 수 있는데 signed의 경우 생략이 가능하다. 그렇다면 부호가 없는 자료형은 무엇일까 signed에서 유추할 수 있다. 바로 unsigned이다.
자료형 앞에 unsigned를 추가해 주면 부호가 없는 자료형을 뜻하고 범위는 0에서부터 시작하게 된다.
char는 문자 한 개를 저장할 때 사용하는 자료형인데 해당 문자를 직접 저장하는 것이 아닌 해당 문자에 해당하는 정수값을 저장하는 것이다. 각 정수값과 문자의 매칭은 아스키(ASCII) 코드표를 참조하면 된다.
그리고 void라는 자료형도 있는데 이는 형태가 없는 자료형으로 추후에 포인터, 함수의 반환값 등 다양하게 사용된다.
변수
자료형에 대해 알아보았으니 이제 변수를 선언해보자.처음에 작성되어 있듯이 변수의 선언은
자료형 변수이름;
여기에서 주의할 점이 있는데 변수의 이름의 경우 몇 가지 규칙을 지켜야 한다.
1. 첫 글자는 숫자를 사용해서는 안 된다.
2. C언어의 키워드(int, if, double...)은 사용할 수 없다.
3. 대소문자를 구분해야 한다.(ex. int a와 int A는 다른 변수)
4. 영어, 숫자, _(밑줄 문자)만 사용하자.
자 이제 변수를 직접 선언해보자
#include<stdio.h>
int main(){
int num1; //정수형 변수 num1이라는 이름으로 선언
int num2=20; //정수형 변수 num2를 선언해 20으로 초기화
int num3,num4,num5; //,(콤마)로 구분해 여러개 동시에 선언
num3=1; //num3라는 변수에 1이라는 값 할당
num4=5;
num5=9;
printf("%d %d %d %d\n",num2,num3,num4,num5);
return 0;
}
정수형 변수 5개를 선언하고 printf함수를 사용해 화면에 변수의 들은 값들을 출력하는 소스이다. 구문의 끝마다 세미콜론(;) 작성을 잊지 말자!!!!!!
printf함수의 사용법이 이전에 Hello World를 출력하는 것과 많이 달라 보인다.
printf함수는 ""(큰따옴표)안의 내용을 화면으로 출력해주는 역할을 하는데 큰따옴표안에 %d와 같은 서식 지정자가 있다면 ,(콤마) 뒤에 있는 변수로 해당 부분이 바뀌게 된다. %d는 정수를 출력할 때 사용하는 서식 지정자이다. 하나의 예를 보면서 이해해보자.
#include<stdio.h>
int main(){
printf("this is %d",1);
return 0;
}
괄호 안에 "this is %d",1 이 들어있는데 this is는 화면에 그대로 출력되고 서식지정자 %d는 콤마 뒤의 1로 바뀌어 출력된다. 예에서는 %d에 직접 정수 1을 지정해 줬지만 변수를 넣어주어도 된다. 또한 이전 코드처럼 여러 개의 서식 지정자를 한 번에 사용할 수 있으며, 해당 서식 지정자 개수만큼 콤마로 구분해서 값이나 변수를 작성해 주어야 한다.
코드 1로 다시 돌아가자 초기화와 할당이라는 말이 있다.
값 할당의 경우 = 기호를 사용한다. C에서 =기호는 같다는 뜻이 아니다. 값을 할당할 때 사용하는 기호이다. 따라서 num3=1;은 num3라는 변수에 1이라는 값을 할당(저장) 하겠다는 뜻이다.
초기화란 값의 선언과 동시에 값을 할당해 주는 것으로 int num2=20; 처럼 작성하며 정수형 변수 num2를 선언하고 해당 변수에 20을 저장하겠다는 뜻이다.
코드 1에서 num1변수는 초기화도 값 할당도 하지 않았다. num1을 출력하면 컴파일러마다 다르게 작동한다. dev c++의 경우 0으로 자동 초기화가 이루어지고 visual studio 2019의 경우 초기화가 되지 않은 변수라며 error가 나온다.
쉽게 생각해서 num1에는 우리가 모르는 값 즉 쓰레기 값이 들어있다고 생각하면된다. 다른 연산에서 초기화 되지않은 변수를 사용하게 되면 프로그램에서 어떤 문제를 일으킬지 모르기 때문에 주의하자.
코드 1의 printf함수를 살펴보자.
printf("%d %d %d %d\n",num2,num3,num4,num5);
서식 지정자가 4개가 있으므로 ,로 구분된 4개의 값이 정수형태로 대신 출력된다.
따라서 num2에 들어있는 20
num3에 들어있는 1
num4에 들어있는 5
num5에 들어있는 9 가 차례대로 출력되는 것이다.
서식 지정자 이외는 그대로 화면에 출력되므로 띄어쓰기(공백) 또한 똑같이 출력된다.
서식 지정자의 종류를 살펴보자.
서식 지정자 |
출력 형태 |
%d |
부호 있는 10진 정수 (4byte) |
%lld |
부호 있는 10진 정수 (8byte) |
%u |
부호 없는 10진 정수 |
%o |
8진수 정수 |
%x |
16진수 정수 |
%p |
포인터 정수(16진수) |
%f |
float,double형 실수 |
%Lf |
long double형 실수 |
%c |
문자 한개 |
%s |
문자열 |
다른 자료형의 변수 선언도 코드1과 같이 선언해주면 되고, 출력은 서식 지정자를 확인해 출력하면 된다.
왜 굳이 힘들게 서식지정자를 만들면서 출력하는지 짜증 날 것이다. printf("2009년 3월 2일"); 이라고 출력을 하게되면 분명 숫자도 정상적으로 출력이된다. 하지만 이는 숫자로서의 2009가아닌 문자열 2009가 출력되는 것이다.
또한 서식지정자가 없다면 변수에 있는 값을 출력하고 싶을때 printf("this is num1"); 안에 들어있는 num1이 변수인지 아니면 문자열 num1인지 구분할 방법이 없어진다. 따라서 서식지정자를 사용하여야 한다.
자료형부분은 정수,실수,문자 편에서 다 자세하게 다루어 볼것이다.
정리
1. 변수의 선언은 자료형 변수이름 의 형식으로 선언한다.
2. 변수를 출력하고 싶을 때에는 서식 지정자를 사용한다.
3. 초기화되지 않은 변수를 주의하자
4.구문의 끝마다 세미콜론(;)을 입력하자!!!
'Programming Language > C' 카테고리의 다른 글
6.(C언어) 진법, 음수표현 (0) | 2020.08.01 |
---|---|
5.(C언어) 자료형_문자 (0) | 2020.08.01 |
4.(C언어) 자료형_실수 (0) | 2020.08.01 |
3.(C언어) 자료형_정수 (0) | 2020.08.01 |
1.(c언어) Hello World! (0) | 2020.08.01 |