C언어 변수 선언 방법
프로그램에서 데이터를 메모리에 저장해 놓으면 필요할 때마다 꺼내 사용할 수 있습니다. 이때 변수 선언을 통해 메모리에 저장 공간을 확보합니다. 변수는 데이터의 종류에 따라 각각 다른 형태를 사용하는데, 정수는 int, 실수는 double, 문자는 char, 문자열은 char 배열을 사용합니다. 구체적인 것은 글을 이어나가며 설명할 것이고 변수 선언 방법에 대해 먼저 알아봅시다.
변수 선언 방법
먼저 예를 들어 정수를 저장할 변수는 다음과 같이 선언합니다.
int a;
자료형 int 와 변수명 a 를 이용해 int a; 로 변수를 선언합니다. int 는 integer 의 앞글자를 따왔으며 정수를 의미합니다. 정수를 저장할 공간을 a라 이름 붙여 메모리에 4바이트 할당하겠다고 컴파일러에 알려줍니다. 변수명은 메모리에 붙이는 임시 주소와 같은 개념입니다.
변수를 선언하면 메모리에 저장 공간이 생기는데 처음 그 안에는 어떤 값이 들어 있을까요? 알 수 없습니다. 컴퓨터의 메모리 공간은 재활용됩니다. 프로그램이 종료되면 사용하던 메모리 공간을 반납하고 새로 실행된 프로그램이 그 공간을 사용하는 겁니다. 이때 종료된 프로그램이 어떤 값을 메모리 공간에 남겨 놓았는지 알 수 없습니다. 새 프로그램에서 이 값은 의미가 없으므로 이를 쓰레기 값(garbage value)이라고 합니다. 자칫 이 쓰레기 값 때문에 프로그램에 오류가 생길 수 있으므로 반드시 원하는 값으로 바꾸는 초기화 과정이 필요합니다. 초기화 방법은 다음과 같습니다.
a = 10;
수학에서 우리는 양쪽이 같다는 의미로 '=' 를 사용했는데 프로그램에서는 대입 연산자라 부릅니다. 오른쪽 값을 왼쪽에 저장한다는 의미입니다. 왼쪽은 저장 공간을 의미합니다. 다음 예제를 봅시다.
#include <stdio.h>
int main(void)
{
int a;
int b, c;
double da;
char ch;
a = 10;
b = a;
c = a + 20;
da = 3.5;
ch = 'A';
printf("변수 a의 값 : %d\n", a);
printf("변수 b의 값 : %d\n", b);
printf("변수 c의 값 : %d\n", c);
printf("변수 da의 값 : %d\n", da);
printf("변수 ch의 값 : %d\n", ch);
return 0;
}
/*
<Run>
변수 a의 값 : 10
변수 b의 값 : 10
변수 c의 값 : 30
변수 da의 값 : 3.5
변수 ch의 값 : A
*/
위 예제를 통해 변수 선언과 대입 규칙을 알아봅시다.
변수 선언과 대입 규칙
규칙 1. 중괄호의 블록({}) 안에 변수를 선언하며 선언한 위치부터 블록 끝까지 사용할 수 있습니다.
변수를 블록 전체에서 사용하려면 블록이 시작하는 부분에 선언합니다. 코드에서 4~23행이 중괄호의 범위이며 블록 시작 후 변수를 모아서 선언했습니다. 물론 중간에 새로운 변수를 선언할 수 있으며 그 이후부터 쓸 수 있습니다. 단, 앞 에서 선언한 변수와 같은 이름은 사용할 수 없습니다.
규칙 2. 컴파일러에 따라 변수의 선언 위치가 제한될 수 있습니다.
VC++ 2019를 포함하여 현재 사용되는 대부분의 컴파일러는 문제가 없겠지만, 오래전에 개발된 컴파일러를 사용한다면 주의해야합니다. C99 이전의 컴파일러라든가, 비주얼 스튜디오 2012 VC++ 컴파일러는 반드시 맨 앞에 변수를 선언해야 합니다.
규칙 3. 변수의 자료형이 같으면 동시에 둘 이상의 변수를 선언할 수 있습니다.
6행을 보면 2개의 변수를 동시에 선언했습니다. 변수명을 콤마로 구분 지어 동시에 선언할 수 있습니다.
int a, b, c;
규칙 4. 대입 연산자(=)는 연산자 왼쪽의 변수에 오른쪽의 값을 저장합니다.
변수를 선언하면 메모리에 일정한 크기의 저장 공간이 생기는데, 이 공간에 데이터를 넣을 때는 대입연산자(=)를 사용합니다. 10~14행이 선언된 변수에 값을 저장하는 부분입니다. 따라서 대입 연산자 왼쪽에는 저장 공간을 뜻하는 변수만 사용할 수 있고 오른쪽에는 상수와 변수, 수식을 모두 사용할 수 있습니다. 오른쪽에 변수를 사용하면 변수에 저장된 값이 복사되어 왼쪽 변수에 저장되고 수식을 사용하면 연산을 수행한 후에 그 결괏값이 왼쪽 변수에 저장됩니다.
규칙 5. 변수는 대입 연산자 왼쪽에서는 저장 공간이 되고, 오른쪽에서는 값이 됩니다.
예를 들어 다음과 같이 두 변수가 있습니다.
int a, b;
a = 10;
b = a;
2행의 변수 a 와 3행의 변수 a 는 같은 a 지만, 2행의 a 는 저장 공간, 3행의 a 는 값입니다. 변수가 왼쪽에 있는 a 는 저장 공간이므로 값이 10으로 변경되지만, 오른쪽에 있는 a는 저장 공간의 값(10)을 복사해서 사용하므로 변수 a의 값은 바뀌지 않습니다. 또한 연산하거나 출력할 때도 값을 복사해서 사용하므로 변수의 값이 바뀌지 않습니다.
이 때, 저장 공간으로 사용하는 변수를 l-value, 값으로 사용하는 변수를 r-value로 부르기도 합니다.
'C언어' 카테고리의 다른 글
[C언어] unsigned 정수 자료형, 사용 이유 (0) | 2021.05.11 |
---|---|
[C언어] 정수 자료형 (0) | 2021.05.10 |
[C언어] 실수 상수의 오차 (0) | 2021.05.08 |
[C언어] 상수의 비트 형태 (0) | 2021.05.07 |
[C언어] 문자와 문자열 상수 표현법 (%c, %s) (0) | 2021.05.06 |
댓글