소프트웨어/C 언어

[C언어]28. 메모리를 직접 관리하는, 포인터에 대하여 알아보자 ( 포인터란 )

리습 2013. 7. 5. 11:34


 안녕하십니까. 리습입니다.


 C언어는 매우 많은 분야에 사용되고 있습니다. 하드웨어를 직접 제어하는 임베디드 분야부터 응용프로그램 까지 오히려 사용 안되는 분야를 찾는것이 쉽습니다. (물론 각 특수한 분야에는 각각의 특화된 언어를 사용합니다.) 그정도로 강력하고 범용적이라는 것이지요. 이렇게 C언어를 매우 강력한 도구로 만들어 주는 이유는 다름아닌 '포인터'의 존재 덕분입니다. 


  포인터란? 

 모든 프로그램은 CPU의 연산 활동을 바탕으로 구동하게 됩니다. 그리고 CPU는 메모리에서 연산을 위한 데이터를 가져오게 되죠. 즉 우리가 메모리를 제어할 수 있게 되면 CPU의 연산활동을 자유자재로 조종할 수 있다는 것입니다. 포인터는 이런 메모리에 직접적으로 접근하여 조작할 수 있는 장치입니다. 특정 메모리 주소를 가리키고 있는 것이죠. 그리고 메모리 주소를 저장하는 포인터를 포인터 변수 라고 합니다.



포인터 변수 


 포인터 변수는 메모리의 주소를 저장하고 있는 공간입니다. 우리가 일반적으로 사용하는 변수와 차이가 없죠. 포인터 변수를 사용하는 것 또한 같습니다. 


 읽어낼 포인터 형식 이란. 특정 메모리 주소에서 어떤 방식으로 어떤 크기만큼 읽어 낼것인지 미리 포인터 변수에게 알려주는 것입니다. 예를 들어 char *ptr 이란 포인터 변수를 만들게 된다면 특정 메모리 주소에서 1byte 만큼의 값을 읽어내며 읽어내는 방식 또한 char 의 방법으로 읽어냅니다. 


 형식과 이름 중간에 * 라는 것이 있는데 이것은 이것이 포인터 변수이다. 라고 알려주는 역활을 합니다. ( *이 없으면 일반 변수죠.), 이것의 위치에 대해서 많은 이야기가 있지만 포인터 변수를 자세히 알아볼때 언급하도록 하겠습니다.


 이름은 변수의 이름과 같이 자유롭게 만드시면됩니다. 


우선은 포인터가 무엇인지에 대해서만 언급하도록 하겠습니다. 포인터가 어렵다는 이야기가 많은 것은 하나하나 개념을 햇갈려하기 때문입니다. 앞으로 차근차근 하나씩 포인터를 정복해보도록 하겠습니다.