← 목록으로

📦 2단계: 변수와 주소

변수는 메모리 한 칸에 있어요

변수는 “이름이 붙은 메모리 한 칸”이에요. int a = 10;이라고 쓰면, 컴퓨터는 메모리 어딘가에 방 하나를 잡고, 그 방의 이름을 a(변수 이름)로 부르고, 그 안에 10을 넣어요. 그 방에는 반드시 주소가 있어요.

변수 이름: a
주소: 0x1000
값: 10

코드에서 a만 쓰면 → 그 변수(방)에 있는 값(10)을 쓰는 거고,
주소를 알고 싶다면 → &a라고 쓰면 돼요. &는 “그 변수의 주소를 달라”라는 뜻이에요.

주소를 출력해 보기

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

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

✅ 2단계 정리

📋 실습 과제

과제 1 변수 a, b, c를 각각 10, 20, 30으로 선언한 뒤, 세 변수의 값과 주소를 모두 출력하는 프로그램을 작성하세요.

✏️ 여기서 직접 실습해 보세요

모바일에서도 이 창에서 수정·포맷·실행·복사할 수 있어요. [실행]으로 바로 결과를 볼 수 있습니다.

참고 정답 코드 (클릭하여 펼치기)
#include <stdio.h>

int main() {
    int a = 10, b = 20, c = 30;
    printf("a: 값=%d, 주소=%p\n", a, (void*)&a);
    printf("b: 값=%d, 주소=%p\n", b, (void*)&b);
    printf("c: 값=%d, 주소=%p\n", c, (void*)&c);
    return 0;
}
과제 2 위 프로그램에서 a와 b의 주소가 같은지 다른지 if로 비교해 보세요. (&a == &b를 사용하면 됩니다.)

여기서 직접 작성·실행해 보세요. [실행]으로 결과를 확인할 수 있어요.

과제 2 참고 정답 코드 (클릭하여 펼치기)
#include <stdio.h>

int main() {
    int a = 10, b = 20;
    if (&a == &b)
        printf("a와 b의 주소가 같습니다.\n");
    else
        printf("a와 b의 주소가 다릅니다.\n");
    return 0;
}

🔬 심화 학습

sizeof로 변수 크기 알아보기

sizeof(변수)는 그 변수가 메모리에서 차지하는 바이트 수를 알려 줘요. int는 보통 4바이트예요. 주소끼리 빼면 “몇 칸 떨어져 있는지”를 알 수 있어요.

심화 참고 코드 (클릭하여 펼치기)
#include <stdio.h>

int main() {
    int a = 10, b = 20;
    printf("int 크기: %zu 바이트\n", sizeof(int));
    printf("a 주소: %p, b 주소: %p\n", (void*)&a, (void*)&b);
    /* (b 주소 - a 주소)는 컴파일러마다 다를 수 있음 */
    return 0;
}

정리: 변수마다 고유한 주소가 있고, %p로 그 주소를 볼 수 있어요. 다음 단계에서는 이 주소를 저장하는 “포인터”를 배워요.