오늘은 C언어에서 중요한 개념중에 하나인 포인터(pointer)에 대해서 포스팅 하려고합니다.
그리고 더불어서 변수와 포인터의 메모리(memory) 할당과정도 함께 알아보겠습니다.
pointer
(사전적 정의 : 가리키는 것)
포인터의 사전적 정의는 '가리키는 것' 입니다. 그렇다면 과연 무엇을 가리키는 걸까요?
포인터는 주소 값을 저장하는 변수입니다.
그리고 저장된 주소 값을 참고하여 다른 메모리(변수 또는 객체(?))에 접근하는것이며,
이것을 비유적으로 '가리키다' 라고 표현한 것입니다.
(개인적으로는 '포인터'라는 용어보다 변수라는것을 직관적으로 파악 할 수 있는 '포인터 변수'라는
용어를 선호하기 때문에 앞으로 포인터 변수라고 하겠습니다.ㅎ)
포인터 변수를 사용하는 이유는 무엇일까요?
포인터 변수를 사용하는 이유는 코딩과 유지보수의 효율 때문이라고 생각합니다.
특정 메모리에 접근 할 때 사실 포인터 변수를 사용하지 않더라도 주소값을 참조하여 접근이 가능합니다.
하지만 개발자의 입장에서는 주소값보다 포인터 변수(=이름)으로 접근하는것이 코드의
가독성이 향상되기 때문에 코딩과 유지보수의 효율이 높아집니다.
마치 웹에서 외우기 어려운 IP주소 대신 도메인 네임을 사용하는 것과 유사합니다.
(ex) 210.89.164.90 -> naver.com)
그럼 예제 소스와 이미지를 통해서 포인터 변수와 변수의 메모리 할당방식에 대해 확인해보겠습니다.
먼저 소스코드에서 x라는 int형 변수를 선언하고 '13' 을 저장하였고, xp라는 int* 형 포인터 변수를 선언하고
변수 x의 주소값(&x)을 저장하였습니다.
[Source]
그리고 해당 소스를 컴파일해서 프로그램을 실행시키면 컴파일러에 의해서 아래와 같은
심볼 테이블(symbol table) 이 생성됩니다.
[Symbol Table]
변수 x는 int형으로 선언되었기 때문에 각 4byte의 메모리 공간이 할당되며,
포인터 변수 xp는 선언하는 데이터 타입과 별개로 4byte로 메모리 공간이 할당됩니다.
( * 포인터 변수의 메모리 공간의 할당은 선언시의 지정한 타입이 아닌
컴파일러에 따라서 결정됩니다. )
다음 포스팅에서는 조금 더 구체적인 변수와 포인터 변수의
메모리 할당 과정에 대하여 포스팅 하겠습니다.
포인터의 개념과 메모리 할당과정의 이해2 [심화] : http://solt.tistory.com/8?category=795285
최대한 정확한 정보를 공유하고자 항상 신중하게 포스팅을 하고 있지만,
내용에 개선이 필요한 부분이 있을 수 도 있습니다.
혹시나 추가적인 보완이 필요하다고 판단되는 부분이 있다면 댓글로 조언해주세요.
참고하여 수정해놓겠습니다.
* 해당 포스팅이 도움이되셨다면 공감과 댓글 부탁드릴께요 ㅎㅎ
'Computer Language > C' 카테고리의 다른 글
포인터의 개념과 메모리 할당과정의 이해2 [심화] (0) | 2018.08.25 |
---|