[C언어] 변수와 데이터형 알아보기.
Study/C, C+, C++

[C언어] 변수와 데이터형 알아보기.

728x90
반응형

오늘은, 변수와 상수의 개념, 리터럴 상수, 매크로 상수, const 변수 및 C언어의 데이터형에 대해서 알아보려고 합니다.

 


 

데이터형에는, 문자형, 정수형, 실수형이 있고, 참고로 sizeof 연산자도 알아 보겠습니다.

 

변수는, 값이 변경될 수 있는 데이터이고

상수는, 값이 변경될 수 없는 데이터 입니다.

 

데이터를 보관해야 할 필요가 있다면, 변수를 사용해서 데이터를 보관합니다.

이렇게 변경될 수 있는 데이터는, 메모리(memory)에 저장이 됩니다.

 

여기서 메모리는, 연속된 데이터의 바이트(byte)들의 모임을 말합니다.

그리고 여기서 각 바이트(byte)들은, 주소를 갖습니다.

 

메모리에 저장할 데이터 값의 형식(type)에 따라, 메모리가 얼마만큼 필요한지 결정이 됩니다.

 

문자 하나를 저장하기 위해서는, 1바이트 크기의 메모리를 준비하고,

정수를 저장하기 위해서는, 4바이트 크기의 메모리를 준비 합니다. 그리고 이러한 데이터 바이트 들은 연속되어 있습니다.

 

그럼, 변수를 만들기 위해서는 변수 선언을 해야겠죠.

변수 선언을 하게 되면, 특정 크기의 메모리를 준비하게 됩니다. 따라서, 변수를 메모리에 할당하게 되는거죠.

저장 될 값의 데이터형(int, char 등)에 따라, 필요한 만큼 메모리를 할당합니다.

 

#include <stdio.h>
int main(){
 int a; /* 'a'라는 정수형 변수를 선언 */
 char b; /* 'b'라는 문자형 변수를 선언*/
 return 0;
}

 

대표적인 예시입니다. 하지만, 변수를 선언했을 뿐이지 해당 변수에 값을 넣지는 않았습니다.

즉, 초기화 되지 않았습니다. 따라서 해당 변수는 쓰레기값(덤프값)을 갖게 됩니다.

 

변수를 선언하고, 아무값도 주지 않았다고 해서 자동으로 '0' 일거라는 생각은 하면 안됩니다!

 

a=100; /* 'a'라는 정수형 변수에 숫자 100이라는 값을 지정 */
b='A'; /* 'b'라는 문자형 변수에 문자 'A'라는 값을 지정 */
printf("[%d], [%c]", a,b); /* %d 로 정수형 변수를, %c로 문자형 변수를 출력 */

이렇게 main 아래 부분의 함수들을 수정하고, printf를 통하여 출력을 해보면

[100], [A]

라고 출력이 됩니다.

 

기본적인 데이터 형으로는

 

문자형 : char

정수형 : short, int, long

실수형 : float, double

 

이렇게 존재하고, 변수들을 선언해야할 때 주의사항이 있다면

반드시 변수이름은, 영어, 숫자, 언더바( _ ) 만 사용해야 합니다.

또한, 이런 변수 이름의 맨 첫글자는 반드시 영어 혹은 언더바( _ )만 사용해야 하며, 숫자는 첫번째 글자로 사용할 수 없습니다.

 

또한, 대/소문자를 구분하기 때문에 변수 name, Name, NAME 은 서로 같은 변수가 아니라 각각 다른 함수가 됩니다.

그리고, C언어의 키워드는 변수로 사용할 수 없습니다. (if, break, int, float 등)

 

int nice; /* nice라는 정수형 변수 선언 가능 */
int 123kk /* 첫글자가 숫자로 시작하므로, 오류 발생 */
int _123 /* _123 이라는 정수형 변수 선언 가능 */
int kk-12 /* 언더바가 아닌 그냥 바(-)를 썻기 때문에 오류 발생 */

예시를 들면 이렇게 볼 수 있겠네요. int 뿐만 아니라, 모든 데이터형 변수에 적용 됩니다.

마지막으로, 이렇게 변수를 선언할 때, 모~든 문장보다 앞쪽에 위치해야 합니다.

 

int hi; /* 변수 선언 완료 (o)*/
hi = 101; /* hi 라는 변수에 101를 대입하는 대입문 (o)*/
doube = bb; /* 대입문 뒤에 선언되었으므로, 오류 발생 (x)*/

이렇게 예를 들 수 있겠네요!

 

그럼, 우리가 변수를 선언하고, 그 변수의 값이 고정되어 더이상 값이 바뀌지 못하게 할려면 어떻게 해야할까요?

바로 const 변수를 사용하면됩니다!

 

const int ppap = 40; /* ppap 라는 함수에, 40이라는 값을 지정. const 로 인해 변경 불가능인 상태 */
ppap = 11; /* ppap 라는 변수는, const에 의해 40으로 고정되어있으므로, 오류 발생 */

여기서 주의해야 할 점은, const를 이용하려면 반드시 해당 함수를 초기화를 해야한다는 것 입니다.

 

char sun;
int moon;
double earth;

printf("sun의 크기 : %d 바이트\n", sizeof sun);
printf("moon의 크기 : %d 바이트\n", sizeof moon);
printf("earth의 크기 : %d 바이트\n", sizeof earth);

이렇게 입력을 하게 된다면, 결과 값은

 

sun의 크기 : 1바이트

moon의 크기 : 4바이트

earth의 크기 : 8바이트

 

라고 출력이 됩니다.

 

최종정리

변수 : 값이 변경될 수 있는 데이터. 값을 저장하기 위해 메모리를 사용한다.

초기화 : 변수를 초기화 하지 않으면, 덤프값을 갖게 됨으로, 초기화를 하는것이 올바르다.

상수 : 값이 변경되지 않는 데이터. (ex 리터럴 상수, 매크로 상수, const변수)

 

 

문자형 : char | 문자 코드를 저장한다. - 1바이트

정수형 : short, int, long | 부호가 있는 정수, 없는정수 (singed, unsigned)로 나누어진다. - 4바이트

실수형 : float, double | - float은 4바이트, double은 8바이트

sizeof 연산자 : 데이터형 혹은 변수의 바이트 크기를 구해준다.

728x90
반응형