◦ Algorithm/CS

[CS50] 16진수, 포인터

밍블리s2 2021. 11. 9. 13:07

1. 16진수

 

0 1 2 3 4 5 6 7 8 9 A B C D E F

16진수 앞에는 10진수 등과 구분하기 위해 숫자 앞에 0x를 붙인다.

255 = 0xff

65 = 0x41

 

 

 

2. 메모리 주소

 

int n에 50이라는 값을 저장하고 출력 => 아래 그림과 같이 컴퓨터 메모리 어딘가에 4바이트 만큼의 자리를 차지하며 저장되어 있을 것. 

 

 

 

C에서는 변수의 메모리상 주소를 받기 위해 ‘&’이라는 연산자를 사용.

#include <stdio.h>

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

예를 들어, 위와 같은 코드를 실행하면 ‘0x7ffe00b3adbc’와 같은 값을 얻을 수 있고, 이는 변수 n의  16진법으로 표현된 메모리의 주소.

 

 

‘*’를 사용하면 그 메모리 주소에 있는 실제 값을 얻을 수 있음.

#include <stdio.h>

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

위 코드는 먼저 n의 주소를 얻고, 또 다시 그 주소에 해당하는 값을 얻어와 출력한 것이므로 결국 ‘50’이라는 값이 출력.

 

 

 

3. 포인터

#include <stdio.h>

int main(void)
{
   int n = 50;
   int *p = &n;
   printf("%p\n", p);
   printf("%i\n", *p);
}
  • int *p 에서 p앞의 *는 이 변수가 포인터라는 의미, int 는 이 포인터가 int 타입의 변수를 가리킨다는 의미.
  • int *p = &n : int n의 주소를 int 타입으로 *p에 저장.
  • 만약 int p = &n 이라고 p가 포인터임을 명시하지 않으면 컴파일 에러 발생. 주소는 오직 포인터에만 저장 가능.
  • 첫 번째 printf문: 포인터 p의 값, 즉 변수 n의 주소를 출력.
  • 두 번째 printft문: 포인터 p가 가리키는 변수의 값, 즉 변수 n의 값을 출력.

 

포인터 p에는 n의 주소가 저장됨.

 

 

 

🔑 정리하기

 

& : What's the address?

* : Go to the address.

 

 

 

 

 

 

www.boostcourse.org/cs112

 

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

부스트코스 무료 강의

www.boostcourse.org