포인터 연산자의 논리적 처리 과정
예시 코드
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