728x90

- 포인터에 대해서 공부해보겠습니다.
- 우선 메모리 주소에 대해서 살짝 보고 가겠습니다.
- 철수라는 변수의 메모리 주소를 출력하는 방법은 &변수 입니다.
- 위의 코드를 실행하면 다음과 같은 결과물을 확인할 수 있습니다.

- 철수, 영희, 민수 모두 확인해 보겠습니다.


- 다음과 같이 출력되는 것을 확인할 수 있습니다.
- 그런데, 여기서 미션맨이 등장합니다. (포인터를 쉽게 이해하기 위한 미션맨)

- 포인터 변수의 생성은 * 를 앞에 붙여서 생성합니다.
- 포인터 변수에게 철수의 주소 값을 가지도록 초기화합니다.
- 그러면, 포인터 변수를 통해 철수의 주소와 주소에 들어있는 값을 참조할 수 있습니다.

- 출력된 값을 보면 미션맨이 철수의 주소와 암호를 알고 있는 것을 알 수 있습니다.
- 이번에는 미션맨이 영희의 주소값을 가지고 있다고 가정해보겠습니다.


- 미션맨이 영희를 잘 가리키고 있는 것을 알 수 있습니다.


- 이번에는 미션맨의 미션이 바뀌었습니다.
- 각 암호에 3을 곱하라고 하네요.
- 코드를 보면 미션맨이 가지고 있는 값에 곱하기 3을 한 값을 대입해주는 것을 확인할 수 있습니다.
- 미션맨이라는 포인터 변수는 주소 값을 가져올 수 있고, 실제 주소에 담긴 값을 바꿀 수도 있습니다.


- 스파이라는 포인터가 등장했습니다.
- 스파이라는 포인터는 미션맨과 같은 주소를 바라보는데, 주소 값에 대한 실제 값은 다른 값을 갖게 설정했습니다.
- 출력 값을 보면 실제로도 다른 값을 반환하는 것을 알 수 있습니다.



- 그럼, 원본 철수, 영희, 민수는 어떻게 된 걸까요???
- 그리고 스파이와 미션맨의 상태는 어떤 상태일까요??
- 위 코드의 실행문을 보면 철수, 영희, 민수는 실제로 값이 계속해서 수정되었음을 알 수 있고, 스파이와 미션맨도 마지막에 수행한 명령문에 맞춘 값이 있다는 것을 알 수 있습니다.
- 단 여기서 특이한 점은 철수, 영희, 민수는 어떤 포인터가 편집을 해도 다 값이 수정되었는데, 미션맨의 값은 스파이의 값이 바뀌어도 같이 수정되지 않았다는 점입니다.
출처 : 유튜브 나도코딩 https://www.youtube.com/watch?v=q6fPjQAzll8
'[언어] > C 언어(나도코딩)' 카테고리의 다른 글
| 배열과 포인터 { 관계, swap(Call by value), 포인터로 배열 값 변경 } (0) | 2023.06.27 |
|---|---|
| 랜덤(난수) (0) | 2023.06.23 |
| 피라미드 쌓기 { for, while, do while } (0) | 2023.06.23 |
| 경찰서 조서쓰기 { 프로젝트 } (0) | 2023.06.21 |
| 경찰서 조서쓰기 3 { printf, scanf } (0) | 2023.06.21 |