[C] 포인터(Pointer)
"포인터란 메모리의 주소 값을 저장하기 위한 변수이다."
포인터가 변수라는 것을 강조하기 위해서 '포인터 변수'라는 표현을 쓰는 것이다.
모든 변수는 메모리에 값을 저장한다.
const와 같은 고정값 변수 외의 모든 변수는 메모리 중에 RAM에 할당된다.
이러한 메모리의 공간을 구별하는 것이 메모리 주소값이다. 주소로 각각의 위치를 구별한다.
포인터 변수 모두는 메모리의 주소를 지정하는 값을 가진다.
데이터가 존재하는 주소값을 사용하여 액세스한다.
즉, 어떤 번지의 메모리에 값을 쓰거나 또는 읽어 오는 방식이다.
정적변수 역시 메모리에 배치되고 결국은 주소값을 가질 것이다.
그러나 차이점은 기계어 코드에 주소값을 고정하여 액세스된다.
그러나 포인터 변수는 주소값을 가지고 액세스하기 때문에 임의의 위치를 바꿀 수도 있게 된다.
전역변수의 정적변수는 기계어 코드에 주소값을 고정하는 방식이 일반적이다.
지역변수는 스택 또는 CPU의 레지스터를 써서 위치값을 설정한다.
포인터 변수는 메모리에 주소값을 저장하는 방식이기 때문에 이 주소값을 읽어 실제 데이터를 액세스한다.
메모리 액세스 모드 중에 직접주소방식으로 데이터를 액세스한다.
"int *a"와 "int* a" 그리고 "int * a"는 같은 선언이다. 즉 int형 포인터 a를 선언하는 것이다.
이 책에서는 두 가지 형태의 선언 "int *a"와 "int* a"를 혼용해서 사용할 것이다.
"int *a"와 같은 선언이 보다 일반적이지만,
뒤에서 공부하게 될 포인터 배열의 경우 "int* a"와 같은 선언이 가독성을 높여주기 때문이다.
비교 조건 / 비교 대상 포인터 배열 이름 이름이 존재하는가 물론 있다. 당연히 있다. 무엇을 나타내는가 메모리의 주소 메모리의 주소 변수인가 상수인가 변수 상수
참고용어
RAM : Random Access Memory
스택 : 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸쉬(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop).
레지스터 : 프로세서 레지스터(영어: processor register, 순화 용어: 기록기) 또는 단순히 레지스터는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용된다. 대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용. 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리.
참고문헌
윤성우, 윤성우의 열혈 C프로그래밍, FREELEC
위키백과 기여자, "포인터 (프로그래밍)," 위키백과, https://ko.wikipedia.org/w/index.php?title=%ED%8F%AC%EC%9D%B8%ED%84%B0_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&oldid=35463026
위키백과 기여자, "스택," 위키백과, https://ko.wikipedia.org/w/index.php?title=%EC%8A%A4%ED%83%9D&oldid=33889849
위키백과 기여자, "프로세서 레지스터," 위키백과, https://ko.wikipedia.org/w/index.php?title=%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&oldid=31562381