[CS50] 메모리 - 포인터

TIL

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

 

포인터에 대해 알아보자.

포인터 변수

* 연산자는 어떤 메모리 주소에 있는 값을 받아오게 해준다. 이 연산자를 이용해 포인터 역할을 하는 변수를 선언할 수 있다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    int *p = &n;
    printf("%p\n", p);
    printf("%i\n", *p);
}

// 출력 예시
// 0x7ffe00b3adbc
// 50
  • int n = 50; - 정수형 변수 n에 50 저장
  • int *p = &n; - 포인터 변수 p에 변수 n의 주소 저장
  • printf("%p\n", p); - 포인터 p의 값(변수 n의 주소) 출력
  • printf("%i\n", *p); - 포인터 p가 가리키는 값(변수 n의 값) 출력

 

메모리에서의 포인터

실제 컴퓨터 메모리에서 변수 p는 다음과 같이 저장된다.

변수 n은 값 50을 저장하고, 포인터 p는 n의 주소를 저장한다.

 

추상화된 표현

실제로 p의 값(주소)을 정확히 알 필요는 없다. 추상적으로 "p가 n을 가리키고 있다"는 것만 이해하면 된다.

이렇게 화살표로 표현하면 포인터의 개념을 더 직관적으로 이해할 수 있다.

 

포인터 문법 정리

선언

int *p;        // int를 가리키는 포인터
char *c;       // char를 가리키는 포인터

 

초기화

int n = 50;
int *p = &n;   // n의 주소를 p에 저장

 

사용

printf("%p", p);   // 주소 출력
printf("%i", *p);  // 값 출력
*p = 100;          // 값 변경

 

연산자

  • * (선언 시): 포인터 변수 선언
  • * (사용 시): 역참조 (주소의 값 가져오기)
  • &: 주소 연산자 (변수의 주소 가져오기)

 

연습 문제

Q. 포인터의 크기는 메모리의 크기와 어떤 관계가 있을까?
포인터의 크기는 시스템의 아키텍처에 따라 다르지만, 메모리 주소를 저장하기 위해 필요한 비트 수에 따라 결정된다.

 

시스템별 포인터 크기:

아키텍처 주소 공간 포인터 크기 표현 가능한 메모리
32비트 2³² 4바이트 약 4GB
64비트 2⁶⁴ 8바이트 약 16EB (엑사바이트)

 

  1. 포인터 크기는 자료형과 무관
    • int *p1; // 8바이트 (64비트 시스템)
    • char *p2; // 8바이트 (64비트 시스템)
    • double *p3; // 8바이트 (64비트 시스템)
    • 모든 포인터는 메모리 주소를 저장하므로 크기가 같다.
  2. 시스템 아키텍처에 종속
    • 32비트 시스템: 최대 4GB 메모리 주소 지정 가능
    • 64비트 시스템: 이론상 16EB까지 주소 지정 가능
  3. 확인 방법
    • printf("포인터 크기: %lu바이트\n", sizeof(int*));

 

결론
포인터의 크기는 시스템이 다룰 수 있는 메모리 주소 공간의 크기를 결정한다.
더 큰 포인터는 더 많은 메모리를 주소 지정할 수 있다.

'TIL' 카테고리의 다른 글

[CS50] 메모리 - 문자열 비교  (0) 2025.11.07
[CS50] 메모리 - 문자열과 메모리  (0) 2025.11.07
[CS50] 메모리 - 메모리 주소  (0) 2025.11.07
[CS50] 알고리즘 - 병합 정렬  (0) 2025.11.06
[CS50] 알고리즘 - 재귀  (0) 2025.11.06
'TIL' 카테고리의 다른 글
  • [CS50] 메모리 - 문자열 비교
  • [CS50] 메모리 - 문자열과 메모리
  • [CS50] 메모리 - 메모리 주소
  • [CS50] 알고리즘 - 병합 정렬
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문자열
    페이지 라우터
    CS
    javascript
    emotion diary
    함수 타입
    App Router
    인터페이스
    바닐라 자바스크립트
    algorithm
    typescript
    Trouble Shooting
    자료구조
    Spa
    generic
    클래스
    C
    배열
    알고리즘
    useState
    타입 좁히기
    cs50
    Next.js
    ai 감성 일기장
    제네릭
    Pages Router
    memory
    react
    앱 라우터
    트러블 슈팅
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 메모리 - 포인터
상단으로

티스토리툴바