변수는 “이름이 붙은 메모리 한 칸”이에요. int a = 10;이라고 쓰면, 컴퓨터는 메모리 어딘가에 방 하나를 잡고, 그 방의 이름을 a(변수 이름)로 부르고, 그 안에 10을 넣어요. 그 방에는 반드시 주소가 있어요.
코드에서 a만 쓰면 → 그 변수(방)에 있는 값(10)을 쓰는 거고,
주소를 알고 싶다면 → &a라고 쓰면 돼요. &는 “그 변수의 주소를 달라”라는 뜻이에요.
아래 코드에서 a는 변수 이름(정수 하나를 담는 공간)이에요. a는 그 안의 값, &a는 그 변수가 있는 주소예요. [실행]으로 바로 결과를 볼 수 있어요.
%d는 숫자(값), %p는 주소를 출력할 때 써요. 실행할 때마다 주소가 다르게 나올 수 있어요. 그게 정상이에요!
&변수이름 → 그 변수가 있는 주소를 가져와요.printf에서 %p를 써요.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;
}
a와 b의 주소가 같은지 다른지 if로 비교해 보세요. (&a == &b를 사용하면 됩니다.)
여기서 직접 작성·실행해 보세요. [실행]으로 결과를 확인할 수 있어요.
#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로 그 주소를 볼 수 있어요. 다음 단계에서는 이 주소를 저장하는 “포인터”를 배워요.