C Programming

C언어 포인터 기초 (필요성) - 공부하는 도비

DOVISH WISDOM 2022. 10. 13. 20:26  
728x90
반응형

저번 피드에서 C언어의 포인터에 대해 간단히 알아보았습니다. 

2022.10.13 - [C언어] - [C언어] 포인터 기초 (선언) - 공부하는 도비

 

[C언어] 포인터 기초 (선언) - 공부하는 도비

오늘은 모두가 어려워하는 포인터에 대해서 알아볼게요. C언어를 공부하면서 학생들이 손 놓는 부분이 포인터를 배울 때라고 생각해요. 그래서 기초부터 정리해두려고 합니다. 우리가 변수를

yang-wistory1009.tistory.com

오늘은 포인터가 대체 왜 필요한지 설명해보려고 합니다. 

우선 아래 두 가지 코드를 비교해볼게요. 

두 코드 모두 처음 선언한 value 변수에 100을 더하는 코드이고, 차이는 함수의 인자에 값을 넘겨주는 call by value 함수이냐 아니면 주소 값을 넘겨주는 call by reference 함수이냐 입니다.  

첫 번째 코드에서 function 함수 내 vaule 값의 변화를 보기 위해 출력문을 추가해보았습니다. 

첫 번째 코드의 function  함수는 지역변수이기 때문에, 함수 내에서만 연산 결과가 유효하고 다시 main으로 와 value 변수의 값을 출력하면 변화가 없는 걸 확인할 수 있습니다. 

이러한 상황을 막기 위해 C에서는 포인터를 사용하고, 포인터의 특징을 정리해보면 

포인터는 특정한 변수의 주소 그 자체를 가리키기 때문에 이를 응용하여 다양한 연산을 수행할 수 있고, 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 때문에 값이 즉시 변경된다는 특징이 있습니다. 

따라서, 포인터를 사용하면 프로그램 전역에서 변수 값을 컨트롤할 수 있게 됩니다.

 

포인터의 두번째 특징은 선언한 변수가 다른 곳에 필요할 때, 변수 그대로를 복사하지 않아 전송 효율을 높일 수 있습니다.

보통 call by value 함수일때, 아래 그림처럼 선언한 변수가 메모리 한 공간에 복사가 됩니다. 

그리고, 함수에 값이 입력될 땐 사본인 temp가 사용됩니다.

이 경우엔 불필요한 메모리가 낭비되겠죠?  

call by value 함수 일때

 

 

반면, 포인터는 메모리를 낭비하지 않고 변수의 주소값을 딱 알려주니깐 컴퓨터의 메모리에 보다 직접적으로 접근해서, 이를 제어할 수 있게 되는 거죠. 

 

 

이렇게 해서 포인터의 중요성에 대해 알아보았습니다. 다음피드는 포인터를 이용한 배열 접근에 대해 알아보겠습니다.