[메모리] 포인터

·

1 min read

[메모리] 포인터

메모리 주소를 직접 관리하는 것은 쉽지 않기 때문에, C에서는 포인터 라는 개념을 통해서 변수의 주소를 쉽게 저장하고 접근할 수 있다.

포인터에 대해 알아보자.


지난 강의에서 배웠던 *연산자는 어떤 메모리 주소에 있는 값을 받아오게 해준다.

이 연산자를 이용해 포인터 역할을 하는 변수를 선언할 수도 있다.

#include <stdio.h>

int main(void)
{
   int n = 50;
   int *p = &n;
   printf("%p\n", p);
   printf("%i\n", *p);
}
  • 정수형 변수 n에 50을 저장
  • *p라는 포인터 변수변수 n의 주소%n을 저장
  • printf("%p\n", p); : 포인터 p의 값인 변수 n의 주소를 출력
  • printf("%p\n", *p); : 포인터 p 가 가리키는 변수의 값인 변수 n의 값을 출력


실제 컴퓨터 메모리에서 변수 p는 아래와 같이 저장될 수 있다.

아래의 그림과 같이 실제로 p의 값, 즉 n의 주솟값을 생각하지 않고, 추상적으로 단지 pn을 가리키고 있다는 것만 생각해도 된다.


생각해보기

포인터의 크기는 메모리의 크기와 어떤 관계가 있을까?

정답

포인터의 크기는 시스템의 아키텍처에 따라 다를 수 있지만, 대부분의 시스템에서는 메모리 주소를 저장하기 위해 필요한 비트 수에 따라 결정된다.

일반적으로 32비트 아키텍처에서는 4바이트(32비트), 64비트 아키텍처에서는 8바이트(64비트)이다.