본문 바로가기

Computer Science/Computer Organization

<메모리> 메모리와 포인터

 

 

1. 16진수

 - 컴퓨터 과학에서는 숫자를 16진수로 표현하는 일이 많다. 그 이유는 16진수가 10진수에 비해 2진수를 훨씬 더 간단하게 나타낼 수 있어서 컴퓨터 친화적이기 때문이다.

 

 - 예를 들어, 11110000(2) 이라면 16진수는 4자리씩 끊어서 f0이라고 나타낸다. 즉 4비트씩 간단하게 나눠진다.

 

 - 주로 16진수를 나타낼 때에는 앞에 0x를 붙여서 0xf0과 같이 구분하여 나타낸다.

 

 - 16진수는 정보를 훨씬 더 짧게 표현할 수 있다는 장점도 있다.

 

2. 메모리 주소

* 메모리 주소

 - 정수형 변수 n에 24라는 값을 저장하고 출력한다고 가정하자.

 

 - n은 int 자료형이므로 메모리 어딘가에서 4바이트 만큼 자리를 차지한다.

 

 - n은 메모리상에서의 주소값을 갖고 있다. 메모리 상에서의 주소는 C에서 '&'연산자로 받아올 수 있다.

 

 - 주소에 있는 값은 *로 받아올 수 있다.

 

#include <stdio.h>

int main(void)
{
    int n = 24;
    printf("%p\n", &n); //0x7ffca33251ac
    printf("%i\n", *&n); //24
}

 

* 포인터

 - 위에서도 볼 수 있듯이 메모리 주소는 직접 관리하기 매우 어려워 보인다.

 

 - 이 때 필요한 것이 포인터이다. 포인터는 변수의 주소를 쉽게 저장하거나 접근하게 해준다.

 

 - 주소에 있는 값을 가져오는 '*' 연산자로 포인터 역할을 하는 변수를 선언할 수 있다.

 

#include <stdio.h>

int main(void)
{
   int n = 24;
   int *p = &n;
   printf("%p\n", p); //0x7fff123abc
   printf("%i\n", *p); //24
}

 

 - *은 이 변수가 포인터라는 의미를 갖는다. 여기서 int는 이 포인터가 가르키는 변수를 의미한다.

 

 - 프린트 문으로 n의 주소와 포인터가 가리키는 변수의 값을 출력할 수 있다.

 

 - 위 그림과 같이 p에는 주소가 담긴다.

 

 - 하지만 주소값을 생각하기 보다는 추상적으로 p가 n을 가르킨다고 할 수 있다.

 

 

 - 아래의 영상은 포인터를 이해하는데 꽤 도움이 되어서 가져와보았다.

 


 

 

참고

 

 

 이 글은 하버드 대학교 David Malan 교수CS50 강의를 수강 후 정리하며 쓴 글입니다. 코드는 C언어로 작성되었으며, 개발환경은 CS50 IDE에 최적화되어 있습니다. 일부 라이브러리는 다른 환경에서 별도의 설정이 필요할 수 있습니다.

 

 

 

 

 

CS50 공식사이트

 

CS50

Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, r

cs50.harvard.edu

 

부스트코스

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org

 

CS50 IDE

 

CS50 IDE

integrated development environment for students and teachers

ide.cs50.io

얄팍한 코딩사전

 

포인터가 뭐고 왜 쓰는건가요?

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr