주소 연산자와 포인터 연산자
주소 연산자 &
& 는 주소 연산자이다.
- 이 연산자는 변수의 주소를 반환한다.
1
2
3
4
| void address_operator() {
int num = 10;
printf("address of num : %p\n", &num)
}
|
참조(포인터) 연산자 *
*는 참조(포인터) 연산자이다.
- 이 연산자는 포인터가 가리키는 메모리를 참조(접근)하는 연산을 수행
- 즉, 간접 참조(dereference, 역참조)를 발생시킨다.
1
2
3
4
5
6
| void pointer_operator() {
int num = 20;
int *p = #
printf("*p : %d\n", *p);
printf("p : %p", p);
}
|
1
2
| *p : 20
p : 0x12dcf624c
|
- 여기서 잘 이해를 해야한다.
- 먼저, 포인터 자체는 메모리 주소를 저장하고 있다.
1
2
| printf("p : %p", p);
// 출력 : p : 0x12dcf624c
|
- 그리고 포인터 연산(
*)을 하면 해당 변수에 저장된 값에 해당하는 메모리 주소에 접근하게 된다.
1
2
3
| printf("*p : %d", *p);
// 즉, *0x12dcf624c
// 출력 : *p : 20
|
| 코드 |
설명 |
int *p = 주소값; |
포인터 변수 p의 메모리 주소에 접근해 주소값을 저장 |
p |
위 식을 통해 포인터 변수 p에 담긴 주소값 |
*p |
포인터 변수 p가 담고 있는 메모리 주소, 그 주소에 저장된 값 |
1
2
3
4
5
6
| | variable | address | value |
| -------- | ----------- | ----------- |
| num | 0x12aee284c | 20 | *p
| ... | ... | ... |
| p | ??????????? | 0x12aee284c |
| ... | ... | ... |
|
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments