← 목록으로

📬 1단계: 주소가 뭐예요?

먼저: 변수가 뭔가요?

변수는 프로그램에서 “값을 넣어 둘 수 있는, 이름이 붙은 공간”이에요. C에서는 int a = 10;처럼 쓰면, a가 변수 이름이고, 10이 그 공간에 들어 있는 값이에요. 즉 a는 글자 ‘a’가 아니라 “이름이 a인 변수(저장 공간)”를 말하는 거예요.

우편함으로 생각해 보기

아파트에 우편함이 여러 개 있다고 생각해 보세요. 각 우편함에는 번호(주소)가 있고, 그 안에는 편지나 소포(값)가 들어 있어요. C에서 변수는 이런 “우편함 한 칸”과 같고, 변수 이름(예: a, b)은 그 칸을 부르는 이름이에요.

101호 (주소)10 (값)
102호 (주소)20 (값)
103호 (주소)30 (값)
104호 (주소)40 (값)

“103호에 뭐가 있어?” → 30이 있어요. 여기서 103호가 주소, 30이 그 안의 값이에요. C에서 int a = 10;이면, 변수 a도 “어떤 번지(주소)”에 있고, 그 안에 10(값)이 들어 있어요.

컴퓨터 메모리도 비슷해요

컴퓨터도 데이터를 저장할 때 이런 ‘방’들이 많이 있어요. 각 방마다 주소(번지)가 있고, 그 안에 숫자나 문자 같은 값이 들어 있어요.

포인터는 바로 이 주소를 기억하는 것이에요. “그 값이 어디 있는지”를 가리키는 거예요.

✅ 1단계 정리

📌 이 강의에서 쓰는 C 함수 (간략 설명)

아래 실습 코드에 나오는 것만 짧게 정리해요.

주소를 출력해 보기

아래 코드에서 a는 변수 이름(정수 하나를 담는 공간)이에요. a는 그 안의 값, &a는 그 변수가 있는 주소예요. [실행]으로 바로 결과를 볼 수 있어요.

%d는 숫자(값), %p는 주소를 출력할 때 써요. 실행할 때마다 주소가 다르게 나올 수 있어요. 그게 정상이에요!

📋 실습 과제

아래 과제를 순서대로 해 보세요. 답은 다음 단계에서 C 코드로 확인할 수 있어요.

✏️ 여기서 직접 실습해 보세요 (2단계 예습 코드)

아래 코드에서 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;
}
과제 1 다음 표에서 빈칸을 채우세요. (우편함 비유)
우편함 번호주소인가요? (O/X)그 안에 들어 있는 것값인가요? (O/X)
101호O사과 3개O
( )O숫자 50( )

답: 우편함 번호 → 102호(예시), 값인가요? → O

과제 2 “컴퓨터 메모리에서 0x1000번지에 100이 저장되어 있다”고 할 때, 여기서 주소는 무엇이고 값은 무엇인지 써 보세요.

답: 주소 = 0x1000, 값 = 100

과제 3 포인터는 “주소”를 저장하는가, “값”을 저장하는가? 한 줄로 답하세요.

답: 주소를 저장(기억)합니다.

🔬 심화 학습

메모리 주소는 왜 16진수로 보일까?

컴퓨터는 모든 것을 0과 1(2진수)로 저장해요. 하지만 주소를 사람이 볼 때는 2진수로 쓰면 너무 길어지니까, 짧게 나타내기 위해 16진수(0~9, A~F)를 많이 써요. C에서 주소를 출력하면 0x7fff5fb...처럼 0x로 시작하는 16진수로 나와요.

바이트란?

메모리의 “방 한 칸”을 보통 1바이트라고 해요. 정수 하나(int)는 보통 4바이트를 씁니다. 그래서 변수 a 다음에 변수 b가 있으면, a의 주소에 4를 더한 곳 근처에 b가 있을 수 있어요. (2단계에서 실습으로 확인해 보세요.)