주소 연산자 & 와 역참조 연산자 * — %p 주소 출력과 *(&score) | 기초 C언어 10.1.2
기초 C언어Chapter 10 포인터 › Section 01 포인터와 메모리 주소
10.1.2 주소 연산자와 역참조 연산자
변수에서 주소를 얻는 &와 주소에서 값을 꺼내는 *. 서로 반대 방향으로 움직이는 한 쌍의 연산자와 %p를 이용한 주소 출력.
영상 목차 · 원하는 부분부터 보기
01scanf에서 붙였던 그 &교재 299p
- 4.3.1의
scanf("%d", &age);에서 변수 앞에 붙인 &는 주소 연산자. scanf는 값을 저장할 자리를 알아야 하므로 변수의 값이 아닌 주소가 필요했음. - 앞 편에서 변수에는 이름과 함께 메모리 주소가 있음을 확인. 이번 편은 그 주소를 직접 알아내고, 주소로 값까지 꺼내는 두 연산자를 다룸.
- C언어는 메모리 주소를 직접 다루기 위해 &와 *를 제공. 두 연산자는 서로 반대되는 역할이며 포인터 개념의 중요한 부분.
02주소 연산자 & — 변수의 집 주소 알아내기교재 299p
- 주소 연산자(Address-of Operator) — 변수 이름 앞에 붙어 해당 변수가 저장된 메모리의 시작 주소 값을 구함. 변수에게 ‘너의 집 주소가 어디니?’라고 묻는 것과 같음.
- 4바이트를 차지하는 int 변수라도 &가 돌려주는 것은 그 공간의 첫 칸 주소 하나.
- 주소 값을 printf로 출력할 때는 변환 지정자 %p를 사용. p는 포인터(pointer)의 첫 글자.
03값과 주소를 차례로 출력교재 300p
- CODE 10.1 — score를 100으로 초기화한 뒤, 값은 %d와 score로, 주소는 %p와 &score로 출력하는 구성.
- 실행 결과는 값 100 한 줄과 0x로 시작하는 16진수 주소 한 줄. 상세 코드는 교재 CODE 10.1에서 확인.
주소 값은 컴퓨터마다 다름
교재에 실린 0x7ffc9f6b5a34는 하나의 예일 뿐. 같은 코드라도 컴퓨터마다, 실행할 때마다 다른 주소가 출력될 수 있으므로 결과의 주소가 교재와 달라도 오류가 아님.
04역참조 연산자 * — 주소로 값 꺼내기교재 300p
- 역참조 연산자(Dereference Operator) — 메모리 주소 값을 받아 그 주소에 찾아가 저장된 실제 값을 꺼내옴. 집 주소로 그 집에 찾아가 안의 물건을 확인하는 일과 같음.
- 다른 이름은 간접 참조 연산자(Indirection Operator). 주소를 거쳐 간접적으로 값에 접근한다는 뜻.
- &score가 score의 주소라면,
*(&score)는 그 주소에서 꺼낸 값이므로 결국 score의 값과 같음.
곱셈의 *와 역참조의 *
5.1.1의 곱셈 *는 두 값 사이에 놓이는 연산자. 역참조 *는 주소 앞에 하나만 붙는 연산자. 기호는 같아도 놓이는 자리로 구분함.
05주소를 거쳐 꺼낸 값도 100교재 301p
- CODE 10.2 — CODE 10.1에 &score로 구한 주소를 다시 역참조해 출력하는 문장을 더한 구성.
- 실행 결과는 세 줄. 값 100, 주소, 주소를 통해 알아낸 값 100. 첫 줄과 마지막 줄이 같은 값이라는 점이 핵심. 상세 코드는 교재 CODE 10.2.
06서로를 보완하는 한 쌍교재 301p
| 연산자 | 방향 | 예 |
|---|---|---|
| & 주소 연산자 | 변수 → 주소 | &score는 score의 시작 주소 |
| * 역참조 연산자 | 주소 → 값 | *(&score)는 100 |
- &로 얻은 주소에 *를 붙이면 다시 원래 변수의 값. 갔던 길을 그대로 되돌아오는 관계.
- 지금은 주소를 그때그때 구해 썼을 뿐 어디에도 담아 두지 않음. 주소를 저장하는 변수가 포인터 변수이며, 다음 10.2.1에서 그 선언과 사용을 다룰 예정.
이 절의 핵심 정리
- 주소 연산자 &는 변수 이름 앞에 붙어 그 변수가 저장된 메모리의 시작 주소를 구한다.
- scanf에서 변수 앞에 붙였던 &가 바로 주소 연산자였다.
- 메모리 주소 값을 printf로 출력할 때는 변환 지정자 %p를 사용하며, 출력되는 주소는 컴퓨터마다 다르다.
- 역참조 연산자 *는 주소를 받아 그 주소에 저장된 실제 값을 꺼내오며 간접 참조 연산자라고도 한다.
- &로 얻은 주소에 *를 붙인 *(&score)는 score의 값과 같다.
강의 자료10.1.2 주소 연산자와 역참조 연산자
1 / 11
번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다

댓글
댓글 쓰기