1 분 소요

❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.


지난 강의에서 배웠던 * 연산자는 어떤 메모리 주소에 있는 값을 받아오게 해줍니다.
이 연산자를 이용해서 포인터 역할을 하는 변수를 선언할 수도 있습니다.

#include <stdio.h>

int main(void)
{
  int n = 50;
  int *pt = &n; // int * => int를 가리키는 포인터
  // int pt = &n; // 🚨 주소는 반드시 포인터에 저장해야 합니다. int에 저장하려고 하면 컴파일러가 경고합니다.

  printf("%p\n", pt); // 0x7fff3977662c
  printf("%i\n", *pt); // 50
}

위 코드를 보면 정수형 변수 n에는 50이라는 값이 저장되어 있습니다.
그리고 *pt라는 포인터 변수에 &n이라는 값, 즉 변수 n의 주소를 저장합니다.

int *pt에서 pt 앞의 *은 이 변수가 포인터라는 의미이고, int는 이 포인터가 int 타입의 변수를 가리킨다는 의미입니다.
따라서 첫 번재 printf문과 같이 포인터 pt의 값, 즉 변수 n의 주소를 출력하거나,
두 번째 printf문과 같이 포인터 pt가 가리키는 변수의 값, 즉 변수 n의 값을 출력할 수도 있습니다.

실제 컴퓨터 메모리에서 변수 pt는 아래와 같이 저장될 수 있습니다.
스크린샷 2023-06-16 오후 10 29 10

하지만 아래 그림과 같이 실제로 pt의 값, 즉 n의 주소값을 생각하지 않고,
추상적으로 단지 pn을 가리키고 있다는 것만 생각해도 됩니다.
스크린샷 2023-06-16 오후 10 29 19

이런 포인터를 기반으로 해서 앞으로 배울 다양한 데이터 구조를 정의하고 사용할 수 있습니다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: