본문 바로가기

프로그래밍/C언어

[C언어] 변수의 선언


변수라는것을 이용해서 메모리에 어떤 특수한 값을 저장시킬수 있다고

앞글에서 알아보았는데요.

자. 프로그래밍에 있어서 아주 중요한 변수에 대해서 더 자세히 알아봅시다.

변수를 선언할때 앞글에서 어떻게 선언하였죠?

그렇습니다. 중괄호 내의 맨 앞부분에 변수를 선언하는것이죠.

사실. 최근은 아니지만 발표된 C언어 표준에 따르면 변수선언문의 경우에는 그 위치에 대해서 제한을 두지않는다라고 하는데요.

VC++같은 많은 컴파일러가 변수의선언문을 중괄호 앞부분에 위치하는 것을 요구하니까요 지켜주도록 합시다.

참고로 자바에서는 변수선언시의 위치에 대해서는 제한을 두고 있지 않더군요.

자~ 아무튼 앞글에서

int a;

라고 선언을 해줬었는데요. 앞에도 설명을 했었습니다.

int 라는것은 정수를 저장가능한 메모리 공간을 할당할것인데

그 메모리 공간을 a라는 이름으로 하겠다라는 겁니다.

그래서 a에는 한글이나 영어가 아닌 숫자에서도 실수형이 아닌 정수형만을 저장가능하다느거죠.

a에다가 정수가 아닌 다른것을 넣으면 빨간줄이 뜨면서 컴파일 오류가 일어나게 됩니다.

그럼 다른형태의 데이터는 어떻게 저장할까요?

다음 표를 참고합니다.

문자형

char(1바이트)

정수형

short(2바이트)

int(4바이트)

long long(8바이트)

실수형

float(4바이트)

double(8바이트)

문자형의 경우 char를 써주게 되구요.

정수형과 실수형은 표와 같이 쓰게됩니다.

하지만 정수형과 실수형에는 여러가지가 있죠? 각 항목당 위에 있는것일수록 나타내는 범위가 적습니다.

각 형태는 나타낼수 있는 즉 담을수 있는 숫자의 범위가 있는데요.

예로들면 short 같은 경우에는 -32768 ~ 32767 까지 나타낼수 있구요.

int형 같은 경우 -2147483648 ~ 2147483647 까지 나타낼수 있습니다.

범위차이가 엄청나죠?

그럼 왜 이렇게 범위를 나누는것일까? 의문이 들지 않으세요? 범위가 큰 자료형을 이용하면 편할텐데..

당연히 이유가 있습니다. 이렇게 범위를 두는것은

int a; 라고 선언하는것과

short a;라고 선언하는것은 엄현히 차이가 있기때문이죠.

각 자료형 옆에 각각 몇바이트라고 적어놨는데

그것은 무엇을 뜻하는것인가...

int라고 변수를 선언할경우에는 컴퓨터가 a라는 변수를 4바이트로 메모리를 할당해버립니다.

반면에 short형같은 경우 a라는 변수를 2바이트로 메모리를 할당합니다.

비유를 들죠. 어느 작은 물건 하나를 보관할 장소를 찾고있느데,

그거을 담을수 있는 대야랑 조그마한 병이있습니다.

정말 작은 물건이라서 조그마한 병에넣어도 충분한걸 굳이 부피가 큰 대야를 쓰는 사람이 있겠습니까?

이럴때 말하죠. 차암~ 그 작은걸 담으면서 이따마한~ 대야를 쓴다. 분명 누가 보면 그런식으로 핀잔을 줄겁니다.

효율적이지 못하다는거죠. 비유가 좀 그랫는데

이도 똑같습니다. short형이나 int형이나 1이라는 숫자를 담을수 있는 충분한 공간이 되는데

2바이트 작은병에다가 1을 담는것이 더 효율적이냐 4바이트 대야에다가 1을 담을것이냐로 바꿔말할수 있겟죠

4바이트 대야를 쓰고 방안에다 들여놓는다면 방은 좁아질것이구요. 이때 방은 메모리가 되겠죠.

어떤 프로그램이든 많은 메모리를 쓰는 것은 좋지 않습니다.방이 좁아져서 움직일 공간이 여의치않아

움직이기가 불편한것처럼. 컴퓨터도 프로그램에 메모리를 많이 할당하고 쓸수록 느려지니까요.

프로그램 크기를 작고 유용하게 만드는것이 좀떠 빠른 프로그램 구현에 도움을 주는것입니다.

굳이 1이라는 숫자를 담는것에 더 큰 자료형이 필요없는것이죠.

하지만 그 short의 자료형 범위을 뛰어넘는 값을 저장하고자 한다면 당장 범위가큰 자료형으로 바꾸어 주어야 합니다.

참고로 문자를 저장하는 char 자료형의 경우 범위가 -128 ~127이라는 상대적으로 적은 범위를 갖는데

이는 아스키 코드값으로 저 숫자안에 모든문자들이 표현 가능하기 때문입니다.

앞에 예제에서 99였나요? 99가 영어 c를 가르키잖아요. 이렇것입니다.

결론으로 이렇게 선언이 가능합니다.

-----------------------------------------------------------------------------

#include <stdio.h>

int main(void)

{

char a;

int b;

float c;

..

...

....

return 0;

}

-----------------------------------------------------------------------------

그리고 변수 선언시에 주의사항이 있는데요.

정리해보겠습니다.

1. 변수의 선언문은 항시 중괄호 내에서 맨앞부분에 위치해야 합니다.

2. 변수의 이름은 알파벳과 숫자 그리고 언더바(_)로 나타낼수 있습니다.

3. 변수의 이름은 영문자 대소문자를 구분하기 때문에 Apple과 apple의 변수명은 다른 변수로 인식됩니다.

4. 변수의 이름에는 공백이 사용될수 없고 변수명의 첫글짜로 숫자나 키워드를 사용할수 없습니다.

여기서 키워드 특수한 기능이 있는 키워드. 예로들면 자료형을 구분짓는 int, char등을 변수명으로 쓰시면 안되구요.

return 이라는것도 변수명으로 쓰시면 안됩니다.

그리고 3번에 대한 설명은

int Apple;

Apple=3

이렇게 해서 Apple라는 변수에다가 3을 저장시켰는데

printf()문을 통해서

printf("%d", apple);

로 하면 3이라는 숫자가 실행화면에 출력되는것이 아니라 오류가 남을 확인할수 있겠습니다.

그래서 대소문자를 구분한다는거죠.

그리고 공백이 사용될수 없기때문에

int my book;

과 같이 변수를 선언할수 없습니다.