눈으로 하는 코딩이 아닌! 직접 타이핑하는 코딩은 실력 향상에 엄청난 도움이 됩니다.
안녕하세요! 정선생이예요. 오늘은 변수에 대해서 알아볼까해요. 이전 게시글(이동)에서 아~~주 간단하게 정수형 변수를 선언하는 법을 배웠어요.
다시 한 번 더 설명하자면, 변수란 변하는 수를 뜻하는거예요. 앞서 써본 [ int a ]를 정수형 변수 a라고 하죠.
변수 선언에는 주의점이 있고, 형식지정자라는게 같이 붙어있어요. 자료형이라고도 하구요. 보통은 자료형이라고 표현을 합니다.
- 문자형 char
- 정수형 short, int, long
- 실수형 float, double
그렇다면 변수 선언은 다음과 같이 할 수 있어요.
- char c; // 문자형 변수 c 선언
- short s; // short 정수형 변수 s 선언
- int i; // int 정수형 변수 i 선언
- long l; // long 정수형 변수 l 선언
- float f; // float 실수형 변수 f 선언
- double d; // double 실수형 변수 d 선언
- 다음 키워드는 변수명으로 사용할 수 없다.
- 공백은 사용이 안된다. [ int a b; ] 이렇게는 사용이 안된다는 소리예요. 대신에 _(언더바)를 사용해서 공백을 표현하죠.
- 첫 글자에 숫자는 사용해서는 안된다. [ int 3ab; ] 이렇게도 사용해서는 안된다는거예요. 첫글자는 무조건 숫자가 아닌 다른 글자!
- 대소문자를 구별한다. [ int abc; int ABC; ] 두 개의 변수는 다른 변수예요!!!
- 특수문자 사용을 자제하는 것이 좋다. [ int a@b; ] 등등. 컴파일러마다 오류가 되고 안되고.. 여튼 사용은 자제하는 것이 좋습니다!
for |
short |
union |
inline |
auto |
do |
goto |
signed |
unsigned |
break |
double |
if |
sizeof |
void |
case |
elase |
int |
static |
volatile |
char |
enum |
long |
struct |
while |
const |
extern |
register |
switch |
continue |
float |
return |
typedef |
default |
|
|
|
시작부터 해서는 안될게 많네요.. 그렇지만 이미 우리가 알고 있는 short, void, int, double, long, char, ... 등등 요런건 우리가 다른 의미로 사용하고 있는 것이죠? 이런 부분은 키워드라고해요. 다시말해서 이미 그 기능적 의미가 정해져 있는 c언어의 문법을 구성하는 단어들을 가리켜서 키워드(keyword)라고 해요. 이는 프로그래머가 다른 용도로 사용할 수 없도록 제한되어 있어요. 그래서 변수명으로는 사용 할 수 없답니다.
[ int prime_number; ] 이런 방식으로^^
자 이제 다음과 같은 코드를 확인해보죠.
#include <stdio.h> int main() { char a; short b; int c; long d; float e; double f; printf("char => %d\n", sizeof(a)); printf("short => %d\n", sizeof(b)); printf("int => %d\n", sizeof(c)); printf("long => %d\n", sizeof(d)); printf("float => %d\n", sizeof(e)); printf("double => %d\n", sizeof(f)); return 0; }
위와 같은 코드의 결과값은 아래와 '비슷하게' 나올거예요.
왜 '비슷하게' 냐고 했냐면.. 메모리에 얹어지는 사이즈는 시스템마다 다르기때문이예요.
위 코드를 통해 하나를 더 알아낸 키워드가 있어요. sizeof() 라는 것.
sizeof(데이터 타입)이 기본인데, 변수를 집어넣으면 그 변수가 차지하고 있는 바이트 수를 출력해줘요.
만약 형식지정자(데이터 타입이라고 많이 표현해요)를 집어넣게되면 그 데이터 타입의 바이트 수를 출력해줘요.
만약 sizeof(int)를 하면 4가 나와요. int는 4바이트(32비트)이거든요.
이 부분은 현시점으로는 자세하게 다루지는 않을거예요. 만약 추후에 다루게 될 일이 있으면 문제로 다루게 될 것 같네요 :)
이번에 준비한 내용은 여기까지이고 위의 코드만 직접 타이핑해서 컴파일까지해보는게 이번 게시글의 문제네요ㅎㅎ 모두 고생하셨습니다. ^^7
------------------------------------------------------ 다음의 내용은 18.05.07에 추가된 내용 ------------------------------------------------------
변수의 초기화 라는 것이 있어요. 변수는 어떠한 값을 가지고 있어야 변수로서의 의미를 가질 수 있겠죠?
int a; 라고 하는 것은 우리가 정수형 변수 a를 선언한다. 라고 표현을 하고
int a = 10; |
int a; a = 10; |
위와 같은 것을 변수의 초기화. 라고 해요. 정수형 변수 a를 선언하고, 변수가 가지고 있는 값은 10으로 한다. 이런 뜻이겠죠?
변수는 초기화 값을 정해주지 않으면 이상한 값을 가지고 있어요. 흔히 '쓰레기값' 이라고 해요.
우리는 변수를 꼭 초기화를 해주고 사용을 해야 원하는 값을 얻을 수 있어요.
다음의 코드를 타이핑해서 컴파일을 해보세요. 차이점을 알게 됩니다!
#include <stdio.h> int main() { int a; int b = 10; printf("a => %d\n", a); printf("b => %d\n", b); return 0; }
------------------------------------------------------ 다음의 내용은 18.05.14에 추가된 내용 ------------------------------------------------------
제가 변수만 설명을 드렸고 해당 자료형들의 출력법을 안 알려드렸네요.. 죄송합니다 ( _ _ )
문자의 표현 방식은 다음과 같아요
#include <stdio.h> int main() { char c; scanf("%c", &c); printf("입력받은 문자는 %c입니다. 아스키 코드로는 %d입니다.\n", c, c); return 0; }
문자는 %c를 이용하고 %d로 출력을하면 아스키 코드 값이 나오네요. %d가 아닌 다른 것도 사용이 가능해요.
정수 표현 방법은 다음과 같아요.
#include <stdio.h> int main() { int a, b, c; a = 10; b = 0x0A; c = 012; printf("a => %d", a); printf("b => %x or %d", b, b); printf("c => %o or %d", c, c); return 0; }
변수의 초기화에서 0x 로 시작하면 16진수를, 0 으로 시작하면 8진수를 저장해요. 각각의 출력은 %x (%X)와 %o 입니다.
실수 표현 방법은 다음과 같아요
#include <stdio.h> int main() { float a; double b; scanf("%f", &a); scanf("%lf", &b); printf("a => %f\n", a); printf("b => %lf\n", b); printf("a => %.2f\n", a); printf("b => %.2lf\n", b); return 0; }
float형과 double형은 표현 범위의 차이가 있어요.(바이트 수가 다른 것부터 알 수가 있죠.)
float형은 %f로. double형은 %lf로 표현을 하네요. 각각의 출력과 소숫점을 절삭해버리는 부분까지 확인해보세요 ㅎ
다음은 서식문자(%?)에 대한 종류예요.
서식문자 |
출력 대상(자료형) |
출력 형태 |
%d |
char, short, int |
부호 있는 10진 정수 |
%ld |
long |
부호 있는 10진 정수 |
%lld |
long long |
부호 있는 10진 정수 |
%u |
unsigned int |
부호 없는 10진 정수 |
%o |
unsigned int |
부호 없는 8진수 정수 |
%x |
unsigned int |
부호 없는 16진 정수 |
%f |
float, double |
10진수 방식의 부동소숫점 실수 |
%lf |
float, double |
10진수 방식의 부동소숫점 실수 |
%e, %E |
float, double |
e 또는 E 방식의 부동소숫점 실수 |
%g, %G |
float, double |
값에 따라 %f와 %e 사이에서 선택 |
%c |
char, short, int |
값에 대응하는 문자 |
%s |
char * |
문자열 |
%p |
void * |
포인터의 주소 값 |
상당히 많은데 이 중에서 짚고 넘어갈 것은 unsigned int 자료형이예요.
이는 음수를 제외한 0~int size*2 입니다. 즉, 4byte int형은 -2,147,483,648~+2,147,483,647 까지가 범위인데,
-2,147,483,648~-1 까지를 표시 안하고 양수로만 표현하겠다.. 즉, 0~(2,147,483,647 + 2,147,483,648) 까지 표시하겠다. 이런 얘기예요.
보편적인 크기일 뿐이예요. :)
원래는 signed int를 사용해도 되고 int를 사용해도 되요. 결국 의미는 같아요. 대부분은 signed를 생략하죠.
%s, %p는 추후에 다룰 내용이라 아~ 이런게 있구나 ^^ 라고만 알고계세요!! ㅎㅎ
게시글을 보시다가 궁금한 내용, 이게 맞나? 하는 내용, 이건 틀렸어!하는 내용들은 과감하게 댓글 달아주시면 감사하겠습니다.
이론적인 내용에 대한 궁금증은 검색을 통해 궁금증을 해결하는 것이 좋아요!!
실습적인 내용에 대한 궁금증은 최대한 생각을 해보고 검색을 하는 것이 좋아요!!
'Programming > C' 카테고리의 다른 글
[C] 함수 (0) | 2018.05.15 |
---|---|
[C] 반복문 (0) | 2018.05.06 |
[C] 조건문 (0) | 2018.05.04 |
[C] 기본 입/출력 (0) | 2018.04.24 |
[C] 기본 구조 (0) | 2018.04.19 |