Table of contents
메모리 주소를 직접 관리하는 것은 쉽지 않기 때문에, 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
의 주솟값을 생각하지 않고, 추상적으로 단지 p
가 n
을 가리키고 있다는 것만 생각해도 된다.
생각해보기
포인터의 크기는 메모리의 크기와 어떤 관계가 있을까?
정답
포인터의 크기는 시스템의 아키텍처에 따라 다를 수 있지만, 대부분의 시스템에서는 메모리 주소를 저장하기 위해 필요한 비트 수에 따라 결정된다.
일반적으로 32비트 아키텍처에서는 4바이트(32비트), 64비트 아키텍처에서는 8바이트(64비트)이다.