변수와 상수, 리터럴

변수값을 담아두는 공간입니다. 자료형 변수 이름의 형식으로 선언합니다. 각 변수는 메모리상의 공간을 차지하고 있습니다.

int main() {
      int a;      //int형 변수 a
      char b, c;  //char형 변수 b, c
      return 0;
}


변수의 이름에는 규칙이 있습니다. 변수명에는 알파벳 문자와 숫자, _를 사용할 수 있으며, 중간에 공백을 사용할 수 없습니다. 또한, 첫 번째 문자는 알파벳 또는 _여야 합니다. 알파벳 대문자와 소문자를 구별하며, C에서 이미 사용되고 있는 이름인 예약어(if, for 등)는 변수명으로 쓸 수 없습니다.

초기화는 변수의 선언과 동시에 값을 담는 것을 말합니다. 만일 초기화를 하지 않는다면, 변수에는 랜덤한 값(쓰레기 값)이 들어가 있을 것입니다. 따라서 가능하다면 반드시 초기화하는 것이 좋습니다.

int main() {
      int a = 5;        //a를 5로 초기화
      int b = 3, c = b; //b를 3으로 초기화, c를 b(3)으로 초기화
      return 0;
}


대입은 변수에 값을 담는 것을 말합니다.

int main() {
      int a = 5;        //a를 5로 초기화
      int b = 3, c = b; //b를 3으로 초기화, c를 b(3)으로 초기화
      a = 2;            //a에 2 대입
      b = a + 3;        //b에 a + 3, 즉 5 대입
      c = 1;            //c에 1 대입
      return 0;
}


const 키워드를 사용해 상수를 선언할 수 있습니다. 상수의 값은 바꿀 수 없습니다.

int main() {
      const int a = 5;  //a를 5로 초기화
      int b = 3, c = b; //b를 3으로 초기화, c를 b(3)으로 초기화
      a = 2;            //a에 2 대입, 오류!
      return 0;
}


아무 곳에나 대입할 수는 없습니다. =을 기준으로 왼쪽에 올 수 있는 값을 lvalue, 오른쪽에 올 수 있는 값을 rvalue라고 합니다. lvalue는 메모리상의 공간을 차지하고 있으며, 후에 배우겠지만 &연산자를 사용해 주소를 가져올 수 있습니다★. lvalue는 = 오른쪽에 쓸 수 있지만 rvalue는 = 왼쪽에 쓸 수 없습니다. 3, -5.6,'k', "Hello, world!\n"와 같은 리터럴들은 rvalue가 될 수 있지만 lvalue는 될 수 없습니다. 참고로, 문자열 리터럴은 사실 주소값입니다★.

int main() {
      int a = 5, b = 3; //a를 5로 초기화, b를 3으로 초기화
      a = 2;            //a에 2 대입, a는 lvalue, 2는 rvalue
      b = a + 1;        //b에 a + 1, 즉 3 대입, b는 lvalue, a + 1은 rvalue
      b + 1 = 5;        //b + 1에 5 대입, b + 1은 rvalue, 5는 rvalue, 오류!
      return 0;
}