C/개발환경

포인터란?

memora 2024. 5. 22. 23:59

C언어를 어렵게 만드는 범인중에 포인터라는 놈이 있다. 간단하게 말하면 변수의 어드레스라고 할 수 있는데, 어드레스와 포인터는 같은 의미라고 착각하기 쉽지만엄연히 서로 다른 의미를 가지고 있다

 

어드레스(address) 메모리상의 특정 부분을 가리키는 용어로 바이트 단위로 부여된 주소 이다

반면에 포인터는 의미를 부여한 단위(변수나 블록) 대표하는 메모리의 선두 어드레스를 가리키는 용어이다.

 

어드레스에서 1차이는  바이트 차이가 되지만, 포인터에서 1차이는  바이트도   있고,  바이트도   있고, 100 바이트가  수도 있다(의미를 부여한 단위의 사이즈에 따라서 달라진다). 포인터는 프로그래머가 메모리를 사용하기 위해서 어떤 단위를 정의했을 때 (예를 들어 100이라는 수를 보관하기 위해서 A라는 변수를 short라는 타입으로 정의 했을 ), 비로소 생겨나는 개념이다. A변수가 0x00000001 번지에 배치 되어있다고 가정하면, A 포인터는 0x00000001 된다.

어드레스하고 햇갈리기 쉬우므로, 배열을 예로 들어보면, short A[5]라는 배열을 만들었다고 하면, A[0] 포인터는 0x00000001이고 A[1] 포인터는 0x00000003이 된다(short 두바이트 변수 이므로, A 단위는 2바이트가 된다).

 

위키의 정의를 빌리자면, 포인터란, 컴퓨터 프로그램에 있어서, 변수나 정수서브루틴등이 배치되어 있는 메인 메모리상의 어드레스를 격납하기 위한 특수한 변수를 말한다. 특정한 오브젝트가 특정의 논리적 위치정보에 근거해서 억세스 가능할 , 그것을 참조하기위한 . 이라고 되어있다.

 

근데 이건 포인터 변수의 정의 이다. 그러니까 포인터 변수는 포인터를 보관하기 위한 변수라는 말이다.

반응형