C 언어 | 메모리 주소

2021. 2. 19. 23:06Programming/C

학습 목표

16 진법을 읽고 쓸 수 있다.

메모리 주소에 접근하고 값을 받아오는 코드를 C로 작성할 수 있다.

 

16진수

  • 컴퓨터 과학에서는 숫자를 10진수나 2진수 대신 16진수(Hexadecimal)로 표현하는 경우가 많다.
  • 2개의 16진수는 1byte의 2진수로 변환되기 때문에 정보를 표현하기 유용하다.
  • 16진수를 표현할 때는 앞에 '0x'를 붙인다.
  • 16진수는 10에서 15까지를 a에서 f로 대입해서 사용한다(대소문자는 구별하지 않는다).

15는 0xf, 16은 0x10인 식이다.

 

메모리 주소

정수형 변수 n에 50이라는 값을 저장하고 메모리상의 주소를 출력하는 프로그램을 만들어보자. '&'는 메모리상의 주소를 받기 위한 연산자이다.

* 자료형 int는 메모리에서 4바이트 만큼의 자리를 차지한다.

 

#include <stdio.h>

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

 

프로그램 실행 결과는 다음과 같다.

 

메모리 주소 출력

 

프롬프트 창에 16진법으로 표현된 메모리 주소가 나타났다.

 

6번 줄을 printf("%p\n",&n);이 아닌 printf("%i\n",*&n);으로 바꾸면 결과는 다음과 같다.

 

실제 값 출력

위 코드는 먼저 n의 주소를 얻은 다음 해당하는 값을 얻어와 출력한다.

 

&: What's the adress?

*: Go to the adress!

 

 


 

이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.

 

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org