변수는 변하는 수이다. 변수는 두가지 시간을 거친다.
바로 컴파일 시간과 실행시간이다.
변수는 컴파일 시간에도 바뀔 수 있고 실행시간에도 바뀔 수 있다.
변하는 수의 숙명이다.
변수는 사람에게 식별이 가능하다. 그러나 실제로 컴파일러가 소스코드를 기계어로 번역하면서 메모리주소로 변경된다.
직접 메모리에서 사용하는 변수들은 참조형 변수와 다르다. 참조형 변수들은 주소를 가져오는 과정 한 단계를 더 거쳐야 한다. & 메모리 연산자를 통해서 변수들의 메모리를 살펴보자.
#include <stdio.h>
int main(){
int a = 10;
int b = 20;
int c = 5;
char d = 'A';
short e = 15;
printf("Hello World\n");
printf("%d\n",&a);
printf("%d\n",&b);
printf("%d\n",&c);
printf("%d\n",&d);
printf("%d\n",&e);
return 0;
}
메모리를 나름의 규칙을 가지고 할당하는 것처럼 보인다. int 형 변수는 4바이트를 차지하고 있으므로 간격이 4씩 벌어지다가 char 형 1바이트가 나오니까 앞에는 1칸 뒤에는 3칸 차이가 난다.
우리가 컴파일러의 모든 규칙을 알 필요는 없지만 때로는 좀더 자세한 모습을 엿볼 수는 있다. 상상력이 좀 발휘되야 한다. 최근에 유튜브를 보면 인도 IT 강사들은 태생적으로 수학과 컴퓨터를 잘하는 것 같다. 인도 강사들의 수업을 들으면 컴퓨터가 재미있다고 느껴진다.
변수이름 규칙
- 영문자 소문자 a~z 대문자 A-Z 숫자 0~9 (digit) 밑줄(under score) _ 를 조합할 수 있다.
- 이름 맨 앞에 숫자의 사용은 안된다. 공백도 안된다.
- 키워드는 사용할 수 없다.
- 대소문자를 구분한다.
- Camel 표기법이나 헝가리안 표기법을 권장한다. myHouse, l_name
이 정도면 다른 언어들과 비슷하다. 컴파일러의 문법이 있지만 대부분 비슷하다. C 버전에 따라 다르기 때문에 컴파일러가 어떤 것인지 파악한다.
변수의 선언은 아래와 같이 한다. [자료형] + [변수명]
int num1;
short num2;
char ch;
선언과 동시에 값의 초기화가 가능하다.
int num1 = 5;
short num2 = 10;
char ch = 'A';
변수를 사용해보자.
#include <stdio.h>
int main(){
int a = 10;
printf("%d\n",a);
a = -55;
printf("%d\n",a);
a = 975;
printf("%d\n",a);
return 0;
}
변수 a 하나를 가지고 계속 변경해서 사용했다. 변하는 수이기 때문에 가능한 것이다.
%d는 숫자(decimal) 의 출력 포맷이다.
기본 자료형의 자료들로 변수를 생성해보면 변수에 대해 더 잘 알게된다.