포인터 연산자의 논리적 처리 과정

예시 코드

1
2
3
4
5
6
7
int a, b, c;
int *p;
a = 5000;
p = &a;
b = *p;
p = &c;
*p = 100;

1. 포인터에 주소값 할당

1
2
3
4
int a, b, c;
int *p;
a = 5000;
p = &a;
  • int 형 변수 a, b, c 를 선언했고, 변수 a 의 주소값을 포인터변수 p 에 할당했다.
  • 위 코드가 종료된 뒤 메모리 상황은 아래와 같다.
1
2
3
| variable | address | value |
|     a    |   200   | 5000  |
|     p    |   201   | 200   | # 값 할당

2. 변수에 포인터를 통한 값 할당

1
2
3
4
5
int a, b, c;
int *p;
a = 5000;
p = &a;
b = *p;
  • 이어서 int 형 변수 b 에 포인터 변수 p 가 가리키는 메모리에 저장된 값을 할당했다.
  • 위 코드가 종료된 뒤 메모리 상황은 아래와 같다.
1
2
3
4
| variable | address | value |
|     a    |   200   | 5000  |
|     p    |   201   | 200   |
|     b    |   202   | 5000  | # 값 할당

3. 포인터변수가 가리키는 주소값 변경

1
2
3
4
5
6
int a, b, c;
int *p;
a = 5000;
p = &a;
b = *p;
p = &c;
  • 이어서 포인터변수 p 가 가리키는 메모리 주소값을 변수 c 의 메모리 주소값으로 변경함
  • 위 코드가 종료된 뒤 메모리 상황은 아래와 같다.
1
2
3
4
5
| variable | address | value |
|     a    |   200   | 5000  |
|     p    |   201   | 203   | # 변경
|     b    |   202   | 5000  |
|     c    |   203   | ....  |

4. 포인터변수가 가리키는 주소에 저장된 값 변경

1
2
3
4
5
6
7
int a, b, c;
int *p;
a = 5000;
p = &a;
b = *p;
p = &c;
*p = 100;
  • 이어서 현재 포인터변수가 가리키는 메모리공간에 저장되는 값을 100으로 변경했다.
  • 위 코드가 종료된 뒤 메모리 상황은 아래와 같다.
1
2
3
4
5
| variable | address | value |
|     a    |   200   | 5000  |
|     p    |   201   | 203   |
|     b    |   202   | 5000  |
|     c    |   203   | 100   | # 값 할당

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments