변수는 프로그램에서 “값을 넣어 둘 수 있는, 이름이 붙은 공간”이에요. C에서는 int a = 10;처럼 쓰면, a가 변수 이름이고, 10이 그 공간에 들어 있는 값이에요. 즉 a는 글자 ‘a’가 아니라 “이름이 a인 변수(저장 공간)”를 말하는 거예요.
아파트에 우편함이 여러 개 있다고 생각해 보세요. 각 우편함에는 번호(주소)가 있고, 그 안에는 편지나 소포(값)가 들어 있어요. C에서 변수는 이런 “우편함 한 칸”과 같고, 변수 이름(예: a, b)은 그 칸을 부르는 이름이에요.
“103호에 뭐가 있어?” → 30이 있어요. 여기서 103호가 주소, 30이 그 안의 값이에요. C에서 int a = 10;이면, 변수 a도 “어떤 번지(주소)”에 있고, 그 안에 10(값)이 들어 있어요.
컴퓨터도 데이터를 저장할 때 이런 ‘방’들이 많이 있어요. 각 방마다 주소(번지)가 있고, 그 안에 숫자나 문자 같은 값이 들어 있어요.
포인터는 바로 이 주소를 기억하는 것이에요. “그 값이 어디 있는지”를 가리키는 거예요.
아래 실습 코드에 나오는 것만 짧게 정리해요.
#include <stdio.h> — 화면에 출력하는 함수(printf)를 쓰기 위해 맨 위에 한 번 적어요.int main() { ... } — C 프로그램이 실행될 때 제일 먼저 불리는 함수예요. 여기 안에 실행할 내용을 넣어요. return 0;은 “정상 종료”를 알리는 뜻이에요.printf("문자열"); — 화면(표준 출력)에 글자를 출력해요. %d는 정수, %p는 주소를 넣을 자리이고, \n은 줄바꿈이에요. 예: printf("a의 값: %d\n", a); → “a의 값: ” 다음에 변수 a의 값이 나오고 줄이 바뀌어요.아래 코드에서 a는 변수 이름(정수 하나를 담는 공간)이에요. a는 그 안의 값, &a는 그 변수가 있는 주소예요. [실행]으로 바로 결과를 볼 수 있어요.
%d는 숫자(값), %p는 주소를 출력할 때 써요. 실행할 때마다 주소가 다르게 나올 수 있어요. 그게 정상이에요!
아래 과제를 순서대로 해 보세요. 답은 다음 단계에서 C 코드로 확인할 수 있어요.
아래 코드에서 a는 변수 이름(정수 하나를 담는 공간의 이름)이에요. int a = 10;은 “변수 a에 10을 넣는다”는 뜻이고, 그다음 줄은 “변수 a에 들어 있는 값”과 “변수 a가 있는 위치(주소)”를 출력해요. 모바일에서도 수정·포맷·실행·복사 가능해요. [실행]으로 바로 결과를 볼 수 있습니다.
#include <stdio.h>
int main() {
int a = 10;
printf("a의 값: %d\n", a);
printf("a의 주소: %p\n", (void*)&a);
return 0;
}
| 우편함 번호 | 주소인가요? (O/X) | 그 안에 들어 있는 것 | 값인가요? (O/X) |
|---|---|---|---|
| 101호 | O | 사과 3개 | O |
| ( ) | O | 숫자 50 | ( ) |
답: 우편함 번호 → 102호(예시), 값인가요? → O
답: 주소 = 0x1000, 값 = 100
답: 주소를 저장(기억)합니다.
메모리 주소는 왜 16진수로 보일까?
컴퓨터는 모든 것을 0과 1(2진수)로 저장해요. 하지만 주소를 사람이 볼 때는 2진수로 쓰면 너무 길어지니까, 짧게 나타내기 위해 16진수(0~9, A~F)를 많이 써요. C에서 주소를 출력하면 0x7fff5fb...처럼 0x로 시작하는 16진수로 나와요.
바이트란?
메모리의 “방 한 칸”을 보통 1바이트라고 해요. 정수 하나(int)는 보통 4바이트를 씁니다. 그래서 변수 a 다음에 변수 b가 있으면, a의 주소에 4를 더한 곳 근처에 b가 있을 수 있어요. (2단계에서 실습으로 확인해 보세요.)