[언어]/C 언어(나도코딩)

포인터 (기본 이해하기)

Ben의 프로그램 2023. 6. 24. 17:34
728x90

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

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

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

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

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

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

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

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

  • 그럼, 원본 철수, 영희, 민수는 어떻게 된 걸까요??? 
  • 그리고 스파이와 미션맨의 상태는 어떤 상태일까요??
  • 위 코드의 실행문을 보면 철수, 영희, 민수는 실제로 값이 계속해서 수정되었음을 알 수 있고, 스파이와 미션맨도 마지막에 수행한 명령문에 맞춘 값이 있다는 것을 알 수 있습니다.
  • 단 여기서 특이한 점은 철수, 영희, 민수는 어떤 포인터가 편집을 해도 다 값이 수정되었는데, 미션맨의 값은 스파이의 값이 바뀌어도 같이 수정되지 않았다는 점입니다. 

 

 

 

 

출처 : 유튜브 나도코딩 https://www.youtube.com/watch?v=q6fPjQAzll8